Django 在经历多对多关系时,如何获得HyperlinkedEntityField的PK?

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

我的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.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字段