2017-11-25 3 views
1

ValuationAssessmentという2つのモデルがあります。評価には多くの評価(外部キー関係)があります。ユーザーは、評価ごとに1つの評価のみを作成することができます。Djangoテンプレート - ユーザーが既に他のオブジェクト用のオブジェクトを作成しているかどうか確認してください

これは非常にシンプルなようですが、私の周りを頭で囲むことはできません。評価の既存の評価がリクエストに属するかどうかを確認する必要があります。ユーザーはどうすればよいですか?

がリストであるため、これは機能しません。

{% if request.user.assessment_set.all not in assessments %} 
    # Display "make an assessment" form 
{% endif %} 

(この場合はassessmentsは、現在表示されている評価のための評価のリストである)だから、私はrequest.user.assessment_set.allをループする必要があり、利用者の評価のそれぞれがassessmentsリストにあるかどうかを確認したいと思いますが、私はそれが非常に非効率的であり、より良い方法がなければならないと感じます。助言?

+1

その簡単なあなたは本当にテンプレートでこの種のロジックを実行すべきではない – Exprator

+1

理解するように、あなたのモデルを投稿する - それが良いだろうビューコード内でそれを行う(例えば、各評価に注釈を付けて、ユーザーが既にそれを完了したかどうかを知らせる)ことができます。そして、テンプレートロジックは簡単になります。 – solarissmoke

+1

あなたは既にオブジェクトを作成したかどうかをチェックしたいですか? –

答えて

1

あなたの説明に基づいて、私は

class Valuation(models.Model): 
    # fields 

class Assessment(models.Model): 
    #fields 
    user = models.ManyToManyField(User, related_name='assessments') 
    valuation = models.ForeignKey(Valuation, related_name='assessments') 

、あなたは(私は逆の関係をrelated_nameを使用している)以下のモデルのアーキテクチャを持っていると仮定だからのみ1アセスメントを作成するためにログインしているユーザーを制限したい場合それぞれの評価は、評価されていない評価のみを提示します。

views.py

unassessed_valuations = Valuation.objects.exclude(assessments__user=request.user) 

テンプレート

{% for valuation in unassessed_valuations %} 
valuation assessment form 
{% endfor %} 
関連する問題