Django queryset:模型2与model1和给定用户一起存在的所有Model1对象

时间:2015-09-06 07:45:15

标签: python django django-models django-orm

我有两个模型和一个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个对象,其中{1}存在与model1对象和给定的Model2

如果我能想象这张桌子:

User

我试图为用户获取Model1的查询集,比如user = 1,这将导致Model1对象[1,2,4]

1 个答案:

答案 0 :(得分:2)

你可以通过Model2:
    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)