Django 查询集:所有 Model1 对象,其中 Model2 与 model1 和给定用户一起存在
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
个对象,其中 Model2
存在于 model1 对象和给定的 User
。
如果我能想象 table:
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]
你可以通过模型2:
Model2.objects.filter(model1=model1, user=user) \
.values_list('model1', flat=True) \
。清楚的()
首先,您过滤掉所有用户为用户的 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()]))
更新
也试试这个:
Model1.objects.filter(model2__user=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
个对象,其中 Model2
存在于 model1 对象和给定的 User
。
如果我能想象 table:
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]
你可以通过模型2:
Model2.objects.filter(model1=model1, user=user) \
.values_list('model1', flat=True) \
。清楚的()
首先,您过滤掉所有用户为用户的 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()]))
更新
也试试这个:
Model1.objects.filter(model2__user=user)