2010-11-22 4 views
0

status = 'quote'のすべてのプロジェクトを表示する「ステータス別ソート」関数を作成しようとしています。私はこれについてどうやってどうやってやるべきかを理解するのに苦労しています。プロジェクトの状態をフィルタリングする

は、ここで私はviews.pyに別々のビューをやって何の問題もないが、その後、複数のビューを作成し、より効率的な方法が存在しなければならない(簡体字)私の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) 

です。

はここだけ引用状況のプロジェクトを表示するために私の見解である:

@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

これは、ソートのようには見えません。これはフィルタリングの問題のようです。

もしそうなら、あなたのフィルタリングキーがブックマーク可能なアイテムであることを意図しているのか、それともそれらが動的で何らかのベースから始めることを意図しているのかどうかを決める必要があります。あなたのソートキーやCGI引数としてURLを使うかどうかを決めます。

いずれにしても、ハンドラは似ています。最初の場合、あなたはあなたの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を指定したことで保証されます。あなたはCGIの引数については「http://example.com/projects/quoted」

を参照することができます今、あなたの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)) 

そして今、あなたのURLは次のようになります。http://example.com/project/?status=quoted

+0

すごく感謝エルフ、それは私を助けてくれました! – TheLifeOfSteve

+0

Hey Elf、私はレンダリング中に 'Caught NoReverseMatch'を取得しています:引数 '()'とキーワード引数 '{}'が見つからない 'view-status'を逆にします。テンプレートをロードしようとしたときに発生します。助言がありますか? – TheLifeOfSteve

+0

これは別の問題のようです。 (私は関数にurls.pyで間違った名前を付けたことに気づきました;元々のように "プロジェクト"ではなく "quote_projects"という名前が付けられています)。あなたのエラーメッセージが言っていることは、正しく動作するためには、あなたの機能である "view status"がある種のステータスを必要としているということです。 –

関連する問題