3

つまり、ユーザーモデルとディナーモデルがあります。それらはLotteryEntryモデルによって関連付けられています。(別名、人々は夕食に行くために選ばれるために宝くじに入る必要があります)

次のようなディナーのクエリセットがあるとします。

first_page_dinners = Dinner.objects.all().order_by('-created_at')[:5]

そして、現在ログインしているユーザーの「宝くじ」のQuerySet

entries = LotteryEntry.objects.filter(user=request.user)

テンプレートでは、Dinnerオブジェクトをループしていますが、その人がその夕食の宝くじにすでに参加しているかどうかも確認したいと思います...次のようになります。

{% for d in dinners %}
   {% if entries.contains(d) %}
   //custom html here if user has already entered lottery
   {% endif %}
{% endfor %}

ただし、「。contains」は本物ではありません。django / pythonはこのようなちょっとした方法を提供しますか?

4

2 に答える 2

5

values_listを使用してみてください。そうすれば、オブジェクトが存在するかどうかを簡単に確認できます。

dinner_entries = LotteryEntry.objects.filter(user=request.user).values_list('dinner__id', flat=True)

テンプレートでは、次のように確認できます。

{% if d.id in dinner_entries %}
于 2012-05-08T23:13:50.933 に答える
0

データモデルをもう少し詳しく知らずに質問に答えるのは少し難しいですが、それでも私はそうしようとしています。

LotteryEntry遅いですが、うまくいくはずです。夕食ごとに宝くじのエントリを繰り返してから、レコードで外部キーフィールドを探してください。参照されているディナーが外側のループのディナーレコードと一致する場合は、そこにいます。

より高速なソリューションが必要な場合は、ディナーレコードを対応するレコードにマッピングするエントリクエリセットに基づいて辞書を準備する必要がありますLotteryEntry。次に、このマップを使用して、辞書のメソッドを呼び出して、対応する宝くじのエントリを検索できますget。宝くじのエントリーがない場合は、を取得しNoneます。

于 2012-05-08T23:01:30.133 に答える