[英]Django queryset: All Model1 objects where a Model2 exists with a model1 AND the given user
我有兩個模型和一個User
,如下所示:
class Model1(models.Model):
name = models.CharField(max_length=50)
...
class Model2(models.Model):
model1 = models.ForeignKey(Model1)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
...
給定一個User
,我如何獲得這個查詢集:
與Model1
對象和給定User
一起存在Model2
所有Model1
對象。
如果我能想象這張桌子:
Model2 User Model1
1 1 1
2 1 2
3 1 2
4 1 4
5 2 1
6 2 3
我正在嘗試為用戶獲取Model1的查詢集,例如user = 1,這將導致Model1對象[1,2,4]
您可以通過Model2:
Model2.objects.filter(model1 = model1,user = user)\\ .values_list('model1',flat = True)\\ .distinct()
首先,您將以用戶為用戶的所有Model2過濾掉,然后創建不同Model1的列表。
list(set([m2.model1 for m2 in Model2.objects.filter(user=user).all()]))
在您的特定示例中:
list(set([m2.model1 for m2 in Model2.objects.filter(user_id=1).all()]))
UPDATE
也嘗試一下:
Model1.objects.filter(model2__user=user)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.