所以我有一个用户模型和一个晚餐模型。它们与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是否提供了这样一个不错的小方法?
答案 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
。