2013-07-19 6 views
0

Я изучаю Django и пытаюсь фильтровать имена, основанные на таблице базы данных: power_id. Есть ли в любом случае фильтр, основанный на power_id или любой переменной в базе данных? Вот что я до сих пор. Обратите внимание, я использую Twitter-BootstrapФильтрация баз данных Django

Это Team Посмотреть

<div class="accordion-inner"> 
    <ul> 
     {% if User.object.power_id == 1 %} 
      <li> 
       <a href="#"> 
       {{ user }} 
       </a> 
      </li> 
     {% endif %} 
    </ul> 
</div> 

позволяет сказать, 1 является администратором.

Вот мой views.py:

# Home view 
class home(generic.ListView): 
    template_name = 'users/home.html' 
    context_object_name = 'User_list' 
    context_object_name2 = 'Power_list' 

    def get_queryset(self): 
     return User.objects.order_by('username') 

# Team view 
class team(generic.ListView): 
    template_name = 'users/team.html' 
    context_object_name = 'User_list' 

    def get_queryset(self): 
     return User.objects.order_by('username') 

    context_object_name2 = 'Power_list' 
    def in_catagory(User, Admin): 
     return things.filter(Admin=Admin) 
+0

Я не очень понимаю вопрос, и его путь к рано для вас теперь используйте общие представления. Работайте с нормальными представлениями в этот момент времени, затем переходите к общим представлениям. –

+0

У меня в основном есть список имен, каждый в определенном классе. Я пытаюсь показать имена на основе их идентификатора класса или 'power_id'. @GamesBrainiac – pepper5319

+0

Является ли это частью модели пользователя? –

ответ

0

Из того, что я могу видеть, как вы прошли в модели, которую вы создали называется User. Теперь я не знаю, была ли эта модель, которую вы создали, или если вы используете django.contrib.auth.models.User. Но это попытка показать вам, как работать с представлениями в django.

from django.views.generic import View 
from django.shortcuts import render 
from .models import User 


class TeamView(View): 

    def get(self, request): 

     Users = User.objects.filter(power_id='123') 
     return render(request, 'something.html', {'Users': Users, }) 

То, что я здесь сделал, может выглядеть пугающе, но на самом деле довольно просто. Из того, что я могу понять, у вас есть куча пользователей с свойством, называемым power_id. И вы хотите это получить, вам нужно отфильтровать всех ваших пользователей для пользователей с нужным power_id.

Это то, что первая строка после get функция call. вызов функции get здесь, потому что, когда вы отправляете запрос на страницу, например www.google.com, вы отправляете запрос get.

Теперь функция render является функцией быстрого доступа. Он делает это: первый параметр всегда request, вторым параметром является html-файл, который вы хотите его визуализировать, а третьим параметром является информация, которую вы отправляете, которая является словарем.

Теперь подходит к вашему шаблону. Вы можете просто пропустить все ваши пользователи, например:

<div class="accordion-inner"> 
    <ul> 
     {% for user in Users %} 
      <li> 
       <a href="#"> 
       {{ user }} 
       </a> 
      </li> 
     {% endfor %} 
    </ul> 
</div> 
-2

Я нашел ответ на свой вопрос. Оказывается, это было намного проще, чем я думал. Мне нужно было переустановить код, а также получить правильные переменные.

<div class="accordion-inner"> 
    <ul> 
     {% for name in User_list %} 
      {% if name.power_id == 1 %} 
        <a href="#">{{ name }}</a><br /> 
        {% endif %} 
      {% endfor %} 
    </ul> 
</div> 

Файл views.py не нужно редактировать вообще.

+1

Что? Это очень неэффективно. Вы получаете все в базе данных только для отображения 1 записи. – karthikr

+0

@ karthikr: Я пытался сказать ему это. Шаблоны Django достаточно медленны, как есть. Также использование общих представлений на ранней стадии не является хорошей идеей. –

+0

@ karthikr работает так, как я этого хочу. – pepper5319

0

Вы можете переопределить метод get_context_data, чтобы добавить эту другую переменную.

class TeamView(ListView): 
    template_name = 'users/team.html' 
    context_object_name = 'User_list' 
    model = User # You never set the model 

    def get_queryset(self): 
     return super('TeamView', self).get_queryset().order_by('username') # call the parent function 

    def get_context_data(self, *args, **kwargs): 
     context = super('TeamView', self).get_context_data(*args, **kwargs) 
     context['Power_list'] = self.get_queryset().filter(power_id=1) 
     return context 

Теперь вы также контекст переменной Power_list со всеми пользователями, которые имеют power_id == 1, которые вы можете выполнять итерацию над

<div class="accordion-inner"> 
    <ul> 
     {% for user in Power_list %} 
      <li> 
       <a href="#"> 
       {{ user }} 
       </a> 
      </li> 
     {% endfor %} 
    </ul> 
</div> 
Смежные вопросы