加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django ORM无法识别嵌套的ON语句中的具体继承

发布时间:2020-12-20 13:44:44 所属栏目:Python 来源:网络整理
导读:定义结合 django-taggit的自定义Django用户我遇到了ORM问题,我在django管理过滤器中也有这个问题. 注意:我正在使用此代码段:https://djangosnippets.org/snippets/1034/ # Userid | first_name---------------------------------1 | John2 | Jane# MyUseru
定义结合 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的某些标签时,例如

MyUser.objects.filter(tags__in=tags)

我收到以下错误:

(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)))

在第二个ON部分将’id’更改为’user_ptr_id’使查询工作有任何方法可以强制使用Django ORM吗?

解决方法

问题是您无法在标签列表中查找ID;您需要在ID列表中查找ID.要解决此问题,请构建要筛选的所有ID的values_list,然后将该列表传递给原始查询.

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

如果你在MyUser和Tag之间有很多关系,你也可以使用manytomany管理器代替整个事情:

MyUser.tags.all()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读