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

cez*_*zar 4 python django django-rest-framework

使用HyperlinkedModelSerializerfrom Django REST Framework 时,默认情况下id不包含该字段fields。这个问题有一个答案可以很好地解释这一点。

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

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

class Foo(models.Model):
    id = models.IntegerField(primary_key=True)
    # 20-30 fields
Run Code Online (Sandbox Code Playgroud)

serializers.py我想包括模型中的所有字段:

class FooSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Foo
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

但是,这不包括 field id。定义id = serializers.ReadOnlyField()对我也没有帮助,因为id应该是可编辑的。

像这样手动指定所有字段:

fields = ('id', # all other fields)
Run Code Online (Sandbox Code Playgroud)

将是我试图规避的解决方案,因为模型类有很多字段,它们将来可能会发生变化。

是否有一种优雅的可能性来添加该字段id?也许覆盖该__init__方法?

JPG*_*JPG 6

idFooSerializer序列化器中添加属性为:

class FooSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.IntegerField(read_only=True)
    class Meta:
        model = Foo
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)