Django 在经历多对多关系时,如何获得HyperlinkedEntityField的PK?
我的Django项目中有三个模型:Django 在经历多对多关系时,如何获得HyperlinkedEntityField的PK?,django,django-rest-framework,Django,Django Rest Framework,我的Django项目中有三个模型: class Model1(models.Model): name = models.CharField(max_length=10) class Model2(models.Model): name = models.CharField(max_length=10) class OneToTwo(models.Model): one = models.ForeignKey(Model1) two = models.Forei
class Model1(models.Model):
name = models.CharField(max_length=10)
class Model2(models.Model):
name = models.CharField(max_length=10)
class OneToTwo(models.Model):
one = models.ForeignKey(Model1)
two = models.ForeignKey(Model2)
extra_field_necessitating_intermediate_model = models.IntegerField(default=0)
我正在使用Django REST框架为这些模型构建API,我有Model1和Model2的序列化程序:
class Model1Serializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Model1
fields = ('url', 'name')
class Model2Serializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Model2
fields = ('url', 'name')
。。。到目前为止,一切顺利。当我想在Model1序列化程序中嵌套Model2时,问题就出现了。我可以创造
包含Model2数据的OneToTwo实体的中间序列化程序:
class TwosSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.ReadOnlyField(source='two.id')
name = serializers.ReadOnlyField(source='two.name')
class Meta:
model = OneToTwo
fields = ('url', 'id', 'name')
class Model2Serializer(serializers.HyperlinkedModelSerializer):
twos = TwosSerializer(source='onetotwo_set', many=True)
class Meta:
model = Model2
fields = ('url', 'name', 'twos')
。。。但是TwosSerializer
上的url
字段是OneToTwo
实体的字段,而不是相关的Model2
实体的字段。
我想要的是内部序列化程序的url
字段作为的Model2.objects.get(pk=two.id)
的url
关系中的每个两个对象
天真的尝试是使用hyperlinkedEntityField
类创建url
字段定义:
# this is within the TwosSerializer class above...
url = serializers.HyperlinkedIdentityField(view_name='model2-detail', lookup_value='two.id')
。。。但这会导致以下错误:
'OneToTwo' object has no attribute 'two.id'
如何正确地为通过我不希望的中间模型的实体构建URL
在API中公开?您指的是“查找字段”吗?查找值是一个输入错误吗?是的,lookup\u值
是一个输入错误,我的意思是lookup\u字段
。