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)