【发布时间】:2014-09-29 03:04:00
【问题描述】:
我有一个类似这样的数据库架构:
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))
现在我想查询所有拥有特定目标的 UserNotify 对象和至少特定通知级别(例如 2)的用户。
如果我这样做:
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()
但这一步对我来说似乎太过分了,我相信它会执行两个查询。
有没有办法通过单个查询来解决我的问题?
【问题讨论】:
-
我不确定我是否理解您的问题,您说您想要该查询并且该查询正在运行,具体问题是什么?你是什么意思相同的对象?
标签: django foreign-key-relationship django-queryset