[英]Django queryset on related field with multiple constraints
假設我有以下型號:
class User(models.Model):
# ... some fields
class Tag(models.Model):
# ... some fields
class UserTag(models.Model):
user = models.ForeignKey(User, related_name='tags')
tag = models.ForeignKey(Tag, related_name='users')
date_removed = models.DateTimeField(null=True, blank=True)
現在我想說我希望得到所有尚未刪除的給定標記的用戶(即date_removed = None)。 如果我不必擔心date_removed約束,我可以這樣做:
User.objects.filter(tags__tag=given_tag)
但我希望獲得具有該給定標記的所有用戶並且標記上沒有date_removed。 Django有一個簡單的方法可以在單個查詢集中獲取它嗎? 並且假設我有數百萬用戶,因此獲取任何類型的用戶ID列表並將其保留在內存中是不切實際的。
您的filter()
調用可以包含多個約束:
User.objects.filter(tags__tag=given_tag, tags__date_removed=None)
當它們匹配時,它們將匹配相同的 Tag
,而不是兩個可能不同的Tag
。
請參閱跨越多值關系的文檔 ; 特別是, filter(a, b)
和filter(a).filter(b)
之間的差異。 filter(a, b)
filter(a).filter(b)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.