gpt4 book ai didi

Django 过滤同一个外键对象的两个字段

转载 作者:行者123 更新时间:2023-12-05 07:58:19 25 4
gpt4 key购买 nike

我有一个与此类似的数据库模式:

class User(models.Model):
… (Some fields irrelevant for this query)

class UserNotifiy(models.Model):
user = models.ForeignKey(User)
target = models.ForeignKey(<Some other Model>)
notification_level = models.SmallPositivIntegerField(choices=(1,2,3))

现在我想查询所有具有特定目标和至少特定通知级别(例如 2)的 UserNotify 对象的用户。

如果我这样做:

User.objects.filter(usernotify__target=desired_target,
usernotify__notification_level__gte=2)

我获取了所有具有针对指定目标的 UserNotify 对象的用户,以及至少一个 notification_level 大于或等于 2 的 UserNotify 对象。但是,这两个 UserNotify 对象不必完全相同。

我知道我可以做这样的事情:

user_ids = UserNotify.objects.filter(target=desired_target,
notification_level__gte=2).values_list('user_id', flat=True)
users = User.objects.filter(id__in=user_ids).distinct()

但这对我来说似乎太过分了,我相信它会执行两个查询。

有没有办法通过单个查询解决我的问题?

最佳答案

实际上我不知道如何运行第一个查询,因为 usernotify 不是 User 的有效字段名称。

您应该像在第二个示例中那样从 UserNotify 开始:

UserNotify.objects.filter(
target=desired_target,
notification_level__gte=2
).select_related('user').values('user').distinct()

关于Django 过滤同一个外键对象的两个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25155967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com