我有两个模型。在我的视图中,我想返回对Model2的引用Model1,过滤记录的用户归因于ModelTwo。这是我的模型。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归因于ModelOne获得PK。
我对此进行了尝试,但是PK正在获得ModelTwo,并且我希望PK用于ModelOne:
def get_queryset(self):
return ModelTwo.objects.filter(user=self.request.user)
我看到'__'
(下划线,下划线)对另一个类(FK)进行查询,但我没有这样做。另一件事是related_name
,具有与此相关的形式,使用起来很有趣。
有人可以帮助我吗?非常感谢您对我朋友的关注。
答案 0 :(得分:0)
好的,请记住,ForeignKey是一对多的关系。可以有多个ModelTwo记录连接到同一用户。要获取用户的所有ModelTwo记录,您可以执行ModelTwo.objects.filter(user=self.request.user)
或使用默认的相关名称user.modeltwo_set.all()
。
要获得所有ModelOne,您可以使用类似的
ModelOne.objects.filter(id__in=user.modeltwo_set.values_list('pk'
, flat=True))
并且您可以在模型定义中使用related_name替换默认名称。
答案 1 :(得分:0)
基本上,您有几种选择:
如果您只需要ModelOne
个PK,则:
set(ModelTwo.objects.filter(user=self.request.user).values_list('model_one__pk', flat=True))
我用set
删除了重复项。
另一个选项-使用适当的用户获取与ModelOne
有关系的ModelTwo
。我认为这样比较好:
ModelOne.objects.filter(model_two_set__user=self.request.user).values_list('pk', flat=True)