[英]How to change ON expression in django-orm select_related()
所以我有这个模型
class ApplicationForHelp(BaseModel):
user = models.ForeignKey(User, related_name="applications", on_delete=models.CASCADE)
tags = models.ManyToManyField(TagsForApplication, related_name="applications")
title = models.CharField(max_length=50)
description = models.TextField()
is_anonymous = models.BooleanField(default=False)
place = models.TextField(null=True)
和用户模型
所以如果做ApplicationForHelp.objects.filter().select_related('user')
它的作用:离开加入应用程序.user_id = user.id
我想要什么:离开加入(application.user_id = user.id 和 application.is_anonymous=False)
FilteredRelation对象的文档说:
当执行 JOIN 时,FilteredRelation 与 annotate() 一起使用以创建 ON 子句。
给定usernames
,一个用户名的可迭代对象,并假设正在寻找ApplicationForHelp
对象,其user
外键在usernames
中具有用户名,并且其is_anonymous
字段为False
:
from django.db.models import FilteredRelation, Q
apps = (
ApplicationForHelp.objects
.annotate(
not_anonymous=FilteredRelation(
'user',
condition=Q(is_anonymous=False)
)
)
.filter(not_anonymous__username__in=usernames)
.select_related('user')
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.