3

所以我有一个用户模型和一个晚餐模型。它们由 LotteryEntry 模型关联。(又名人们必须进入彩票才能被选中去吃饭)

假设我有一个这样的晚餐查询集:

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

以及当前登录用户的“彩票”查询集

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

现在在模板中,我正在遍历晚餐对象,但还想检查该人是否已经为该晚餐输入了彩票......所以像这样:

{% 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 回答