定义一个结合了Django taggit的自定义Django用户遇到了ORM问题,Django管理过滤器中也有这个问题。在
注意:我正在使用这个片段:https://djangosnippets.org/snippets/1034/
# User
id | first_name
---------------------------------
1 | John
2 | Jane
# MyUser
usr_ptr_id | subscription
---------------------------------
1 | 'A'
2 | 'B'
现在,当我使用django ORM为MyUser筛选某些标记时,例如
^{pr2}$我得到以下错误:
(1054, "Unknown column 'myapp_user.id' in 'on clause'")
打印的原始查询:
SELECT `myproject_user`.`id`, `myproject_user`.`first_name`, `myapp_user`.`user_ptr_id`, `myapp_user`.`subscription`
FROM `myapp_user` INNER JOIN `myproject_user`
ON ( `myapp_user`.`user_ptr_id` = `myproject_user`.`id` )
INNER JOIN `taggit_taggedtag`
ON ( `myapp_user`.`id` = `taggit_taggedtag`.`object_id`
AND (`taggit_taggedtag`.`content_type_id` = 31))
WHERE (`taggit_taggedtag`.`tag_id`)
IN (SELECT `taggit_tag`.`id` FROM `taggit_tag` WHERE `taggit_tag`.`id` IN (1, 3)))
在第二部分中,将'id'更改为'user_ptr_id'可以使查询正常工作,有没有办法在Django ORM中强制执行此操作?在
问题是不能在标记列表中查找ID;您需要在ID列表中查找ID。要解决此问题,请构造一个包含所有要筛选的id的值列表,然后将该列表传递给原始查询。在
如果MyUser和Tag之间存在多对多的关系,那么也可以使用manytomy管理器来代替整个事务:
^{pr2}$相关问题 更多 >
编程相关推荐