[英]Custom writable field in ModelSerializer
我想在創建資源時使用的序列化程序中添加一個自定義字段。 這不是一個模型領域。
我嘗試了以下方法:
class CampaignSerializer(ModelSerializer):
class Meta:
model = Campaign
fields = ("groups",)
write_only_fields = ("groups",)
groups = ListField(IntegerField(), min_length=1)
def validate(self, data):
# ...
return data
但是validate()
函數中的data
中不存在groups
。 我發現 DRF 為該字段設置了read_only=True
,這絕對不是我想要的。
有沒有辦法指定一個可寫字段,還是我必須求助於視圖集的perform_create()
方法?
以下方法可行,但可能不是預期的方式:
from rest_framework import serializers
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('foo', ) # also add your normal model fields
foo = serializers.SerializerMethodField()
def get_foo(self, obj):
return ... # do necessary reading stuff
def create(self, validated_data):
# use self.initial_data to access the raw input data sent in POST request
self.initial_data['foo']
... # do necessary validations of 'foo'
instance = super().create(validated_data)
... # do necessary write stuff
return instance
# Do likewise with .update method
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.