2012-02-14 47 views
3

通用搜索时访问登录用户我有一个模型,看起来像这样:的Django:指定的URL模式

from django.db import models 
from django.contrib.auth.models import User 

    class Application(models.Model): 

     STATUS_CHOICES = (
     (u'IP',u'In Progress'), 
     (u'C',u'Completed')) 

     status = models.CharField(max_length=2 ,choices=STATUS_CHOICES, default='IP') 
     title = models.CharField(max_length = 512) 
     description = models.CharField(max_length = 5120) 
     principle_investigator = models.ForeignKey(User, related_name='pi') 

而且我想用一个通用的ListView,其中列出了应用程序的当前登录的用户,有'IP'的状态

我开始写我的urlpattern,并意识到我需要引用当前登录的用户在我的queryset属性....这是可能的或将需要咬项目符号和编写处理模型查询的标准自定义视图?

这是多远我得到了例证:

url(r'^application/pending/$', ListView.as_view(
     queryset=Application.objects.filter(status='IP'))), 

回答

14

你不能在你的urls.py对用户进行筛选,因为你不知道用户的URL被加载时。

相反,子类ListView并覆盖get_queryset方法来过滤登录的用户。

class PendingApplicationView(ListView): 
    def get_queryset(self): 
     return Application.objects.filter(status='IP', principle_investigator=self.request.user) 

# url pattern 
url(r'^application/pending/$', PendingApplicationView.as_view()), 
+0

真棒,这是一个伟大的,简单的解决方案!干杯! – Ctrlspc 2012-02-14 16:12:21