2013-07-19 49 views
0

我在學習Django,並試圖根據數據庫表過濾名稱:power_id。無論如何根據power_id或數據庫中的任何變量進行過濾?這是我到目前爲止。請注意,我使用Twitter的引導過濾Django數據庫

這是團隊視圖

<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

我基本上有一個名字列表,每個名字都在某個類中。我試圖根據他們的類ID或者'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函數調用後的第一行。 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>