如何在DRF中的HyperlinkedModelSerializer中的字段中添加“ id”

时间:2018-08-21 10:43:33

标签: python django django-rest-framework

在Django REST Framework中使用HyperlinkedModelSerializer时,默认情况下id中不包含字段fieldsquestion的答案很好地说明了这一点。

但是我有一个想以特定方式解决的问题。

我有一个带有自定义ID的模型和其他几十个字段:

class Foo(models.Model):
    id = models.IntegerField(primary_key=True)
    # 20-30 fields

serializers.py中,我希望包括模型中的所有字段:

class FooSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Foo
        fields = '__all__'

但是,其中不包括字段id。定义id = serializers.ReadOnlyField()也无济于事,因为id应该是可编辑的。

手动指定所有字段,如下所示:

fields = ('id', # all other fields)

这是我要规避的解决方案,因为模型类具有很多字段,并且将来可能会更改。

是否存在添加字段id的绝佳可能性?也许覆盖__init__方法?

3 个答案:

答案 0 :(得分:2)

id 序列化程序中添加 FooSerializer 属性为:

class FooSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.IntegerField()
    class Meta:
        model = Foo
        fields = '__all__'

答案 1 :(得分:0)

您可以创建自定义的HyperlinkedModelSerializer并覆盖j以像普通ModelSerializer一样包含ID。

示例:

i

注意:这只是一个想法。我还没有测试。

答案 2 :(得分:0)

HyperlinkedModelSerializer默认不包含id字段。您可以通过将id作为属性添加到序列化程序中来包括它:

class FooSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.IntegerField()
    class Meta:
        model = Foo
        fields = '__all__'