Django-ORM未能识别嵌套状态中的具体继承

2024-04-25 17:17:52 发布

您现在位置:Python中文网/ 问答频道 /正文

定义一个结合了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中强制执行此操作?在


Tags: djangonameidmyprojecttagtaggitormselect
1条回答
网友
1楼 · 发布于 2024-04-25 17:17:52

问题是不能在标记列表中查找ID;您需要在ID列表中查找ID。要解决此问题,请构造一个包含所有要筛选的id的值列表,然后将该列表传递给原始查询。在

id_list = Tag.objects.all().values_list("id")
MyUser.objects.filter(tags__in=id_list)

如果MyUser和Tag之间存在多对多的关系,那么也可以使用manytomy管理器来代替整个事务:

^{pr2}$

相关问题 更多 >