在Django REST Framework中使用HyperlinkedModelSerializer
时,默认情况下id
中不包含字段fields
。 question的答案很好地说明了这一点。
但是我有一个想以特定方式解决的问题。
我有一个带有自定义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__
方法?
答案 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__'