簡體   English   中英

ModelSerializer 中的自定義可寫字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM