在queryset中使用__in时遇到了一个奇怪的问题(使用Django 1.4和SQLite)。
我有一个带字段的模型:
city=somecity
activities=[u'one',u'two',u'three']
activity=one
现在
city = request.user.account.city
activities = request.user.account.activities
queryset = profile_model._default_manager.filter(city__exact=city,activity__in=activities)
不起作用,但如果我将其更改为
city = request.user.account.city
activities = request.user.account.activities
queryset = profile_model._default_manager.filter(city__exact=city,activity__in=[u'one',u'three'])
然后没关系。 我得到的活动和我上市一样,所以这不应该是个问题。 我在其他查询集中使用类似的东西
activities__contains=activity
但在这个查询集中我正在搜索“活动”,如果我在此查询集中执行相同操作,则会返回错误,因为没有这样的字段(在本例中为“one”)。
我在尝试
activity__in=list(activities)
但它也无效。
如果我把它作为模板:
{% if activity in activities %}
yes
{% else %}
no
{% endif %}
它没有问题。
知道为什么吗? 谢谢!
答案 0 :(得分:0)
假设活动是与另一个模特的关系,我相信它应该是
activities = request.user.account.activities.all()
...由于request.user.account.activities
是经理,request.user.account.activities.all()
返回所有活动。我相信模板标签在这种情况下“假设”了all()。 Django模板可以做许多复杂的事情来帮助快速开发。
有关详情,请参阅此处https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward。