我从模型中删除了一些字段,但我希望序列化程序仍然接受这些字段作为输入。 如何拥有序列化程序接受但不使用的字段?
class EventBaseSerializer(ModelSerializer):
class Meta:
model = models.Event
fields = ("id", "name")
#unused_fields = ("last_name")
来自 http://www.django-rest-framework.org/api-guide/serializers/
您可以向模型序列化程序添加额外的字段或覆盖默认值 字段通过在类上声明字段,就像对 序列化程序类。
class AccountSerializer(serializers.ModelSerializer):
url = serializers.CharField(source='get_absolute_url', read_only=True)
groups = serializers.PrimaryKeyRelatedField(many=True)`
class Meta:
model = Account
将字段用于输入而不是输出,则需要将此字段添加到fields
列表中,并将其标记为可能write_only
并带有extra_kwargs
就我而言,我想获取模型以外的数据,并在序列化程序方法中将它们用于其他内容。但是序列化程序的默认"create"方法也尝试使用这些外部字段创建对象,并且应该给出如下错误:
我通过在随打电话给
MyModel.objects.create()
时TypeError
。这可能是因为序列化程序类上有一个可写字段,该字段不是要MyModel.objects.create()
的有效参数。您可能需要将该字段设为只读,或重写 MyModelCreateSerializer.create() 方法才能正确处理此问题。
心所欲地使用它们后从序列化程序的数据中弹出它们来解决此问题,并且一切都很好。
class MyModelCreateSerializer(serializers.ModelSerializer):
foreign_input_1 = serializers.DateField(write_only=True)
foreign_input_2 = serializers.DateField(write_only=True)
class Meta:
model = MyModel
fields = '__all__'
def validate(self, data):
MySecondModel.objects.create(foreign_input_1=data.pop('foreign_input_1'),
foreign_input_1=data.pop('foreign_input_2'))
return data
不要忘记在外部字段上使用 write_only=True
参数。序列化程序将尝试在任何数据返回操作中从对象读取它们,例如返回所创建对象的值。