我正在尝试创建一个'按状态排序'功能,例如显示所有状态='quote'的项目。我在弄清楚如何解决这个问题时遇到了一些麻烦。
这是我的models.py(简化)
class Project(models.Model):
client = models.ForeignKey(Clients, related_name='projects')
created_by = models.ForeignKey(User, related_name='created_by')
#general information
API_id = models.IntegerField(max_length=10, verbose_name='aC ProjectID', null=True, blank=True)
proj_name = models.CharField(max_length=255, verbose_name='Project Name')
...
notes = models.TextField(verbose_name='Notes', null=True, blank=True)
class Status(models.Model):
project = models.ForeignKey(Project, related_name='status')
value = models.CharField(max_length=20, choices=STATUS_CHOICES, verbose_name='Status')
date_created= models.DateTimeField(auto_now=True)
我在views.py中执行单独的视图没有问题,但必须有一种更有效的方法,然后创建多个视图。
以下是我的观点,仅显示报价状态项目:
@login_required
def quote_projects(request):
project_list = Project.objects.filter(status__value__exact='Q')
return render_to_response('project/index.html',{'project_list': project_list, 'user':user}, context_instance=RequestContext(request))
非常感谢任何帮助!
谢谢,
史蒂夫
答案 0 :(得分:0)
这看起来不像排序;这看起来像是一个过滤问题。
如果是这样,你必须决定你的过滤键是否是可收藏的项目,或者它们是否是动态的,而你的意思是从一些基础开始。决定您是否将URL用作排序键或CGI参数。
无论哪种方式,处理程序都是类似的。首先,您将在urls.py中创建:
url('/projects/(?P<status>\d+)/', quote_projects),
您的项目可能如下:
@login_required
def quote_projects(request, status):
status = dict(STATUS_CHOICES).get(status, None)
if not status:
raise Http404
return render_to_response(
'project/index.html',
{'projects': Projects.objects.filter(status__value__exact = status)},
context_instance=RequestContext(request))
根本不需要'用户';这是由RequestContext自动为您提供的,并且您已经指定了此方法login_required。现在您可以参考“http://example.com/projects/quoted”
对于CGI参数,您的urls.py行看起来像这样:
url('/projects/', quote_projects),
你的功能如下:
@login_required
def quote_projects(request):
status = request.GET.get('status', None)
status = dict(STATUS_CHOICES).get(status, None)
if not status:
raise Http404
return render_to_response(
'project/index.html',
{'projects': Projects.objects.filter(status__value__exact = status)},
context_instance=RequestContext(request))