我有叫“has_location”和“locations”的表has{u location'有user_has
和location_id
以及它自己的id
,由django自己给出。
“位置”有更多列。
现在我想得到某个用户的所有位置。我所做的是..(已知user.id):
users_locations_id = has_location.objects.filter(user_has__exact=user.id)
locations = Location.objects.filter(id__in=users_locations_id)
print len(locations)
但是我通过这个得到了0
。我有数据库数据。但我觉得__in
不接受模型id,是吗?
谢谢
对这种查询使用
__in
在Django中是一种常见的反模式:它很诱人,因为它很简单,但是在大多数数据库中伸缩性很差。请参阅this presentation by Christophe Pettus中的幻灯片66ff。用户和位置之间存在多对多关系,由} 向Django描述这一点,如下所示:
has_location
表表示。通常,您会使用带through
表的^{然后您可以获取用户的位置,如下所示:
您可以查询筛选操作中的位置:
您还可以请求使用查询集上的^{} 方法有效地获取用户的相关位置。
你的模特长什么样?
对于您的疑问,
__in
does accept过滤id。对于当前代码,解决方案是:
您正在使用has_location自己的id筛选位置。必须使用
location_id
s筛选位置:也可以通过反向关系直接过滤位置:
相关问题 更多 >
编程相关推荐