检查QuerySet中是否存在对象

时间:2012-05-08 22:45:48

标签: python django for-loop django-queryset

所以我有一个用户模型和一个晚餐模型。它们与LotteryEntry模型相关联。 (也就是人们必须进入抽奖才能被选中参加晚宴)

假设我有一个像这样的Dinners查询集:

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

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

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是否提供了这样一个不错的小方法?

2 个答案:

答案 0 :(得分:3)

尝试使用values_list,因此检查对象是否存在会更容易:

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

在您的模板中,您可以像这样检查:

{% if d.id in dinner_entries %}

答案 1 :(得分:0)

在不更详细地了解您的数据模型的情况下回答您的问题有点困难,但我仍尝试这样做:

慢,但应该有效:尝试迭代每次晚餐的彩票条目,然后在LotteryEntry记录中查找您的外键字段。如果参考的晚餐与外圈的晚餐记录相匹配,那么你就在那里。

如果您想要更快的解决方案,那么您需要根据条目查询集准备字典,将晚餐记录映射到相应的LotteryEntry。然后,您可以使用此地图通过调用字典的get方法来查找相应的彩票条目。如果没有彩票输入,那么您将获得None