如何基于FK进行查询?

问题描述 投票:0回答:2

我有两个型号。在我的视图中,我想要返回什么参考Model1到Model2,过滤用户登录归因于ModelTwo。这是我的models.py

ModelOne(models.Model):
name = models.CharField(max_length=64, unique=True)
description = models.TextField()

ModelTwo(models.Model):
model_one = models.ForeignKey(ModelOne, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

在我看来,我想要一个结果让用户将ModelTwo归结为PK到ModelOne。

我试过这个,但PK得到的是ModelTwo,我想要ModelOne的PK:

def get_queryset(self):
    return ModelTwo.objects.filter(user=self.request.user)

我看到'__'(下划线,下划线)来查询另一个类(FK),但我没有成功。另一件事是,related_name,有一个与此相关的形式,它有趣使用。

谁能帮我?非常感谢你的朋友们的关注。

django django-models django-views django-queryset
2个回答
0
投票

好的,请记住ForeignKey是一对多的关系。可以有多个ModelTwo记录连接到同一个用户。要获取用户的所有ModelTwo记录,您可以执行ModelTwo.objects.filter(user=self.request.user)或使用默认相关名称user.modeltwo_set.all()

要获得所有ModelOnes,您可以使用类似的东西

ModelOne.objects.filter(id__in=user.modeltwo_set.values_list('pk'
, flat=True))

您可以在模型定义中使用related_name来替换默认值。


0
投票

基本上你有几个选择:

如果你只需要ModelOne PKs那么:

set(ModelTwo.objects.filter(user=self.request.user).values_list('model_one__pk', flat=True))

我使用set删除重复项。

另一个选择 - 获取与ModelOne有关系的ModelTwos与相应的用户。我认为它更好:

ModelOne.objects.filter(model_two_set__user=self.request.user).values_list('pk', flat=True)
© www.soinside.com 2019 - 2024. All rights reserved.