我希望我的 django rest 框架序列化程序接受输入但不添加到模型中



我从模型中删除了一些字段,但我希望序列化程序仍然接受这些字段作为输入。 如何拥有序列化程序接受但不使用的字段?

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 参数。序列化程序将尝试在任何数据返回操作中从对象读取它们,例如返回所创建对象的值。

最新更新