2010-11-22 84 views
0

我想創建一個'按狀態排序'功能,顯示,例如..狀態='報價'的所有項目。我在確定如何去做這件事時遇到了一些麻煩。過濾項目狀態

這裏是我的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

目前尚不清楚你的問題是什麼。您是否試圖創建一個視圖,以獲取任何狀態值並顯示具有該值的處方?如果是這樣,你不確定哪一點? – 2010-11-22 17:03:49

回答

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)) 

現在你的網址是:http://example.com/project/?status=quoted

+0

哇感謝精靈,這幫了我很多! – TheLifeOfSteve 2010-11-22 17:45:40