繁体   English   中英

如何在 django-orm select_related() 中更改 ON 表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM