在DRF的CreateAPI中创建Django对象后,您将获得创建的状态201,并使用您用来创建Django对象的相同序列化程序返回该对象。如何在DRF中为具有相同名称的read_only和write_only使用不同的序列化程序?
通缉:上创建:Serializer.comments =文本字段(WRITE_ONLY = TRUE) 和创建(201种状态)Serializer.comments =一个commments的列表
我知道这是可能的重写CreateAPIView.create函数。 但是,我想知道是否有可能通过使用write_only=True
和read_only=True
属性到序列化程序字段。
现在我认为这是不可能的,因为它们都具有相同的名称。 我已经喜欢使用的是假名字kwarg到actual_name
做这样的事:
class CreateEventSerializer(serializers.ModelSerializer):
comments_readonly = serializers.SerializerMethodField(read_only=True, actual_name='comments')
class Meta:
model = Event
fields = ('id', 'comments', 'comments_readonly')
def __init__(self, *args, **kwargs):
super(CreateEventSerializer, self).__init__(*args, **kwargs)
self.fields['comments'].write_only = True
def get_comments_readonly(self, obj):
comments = obj.comments.replace('\r', '\n')
return [x for x in comments.split('\n') if x != '']
不过这样一来,返回的JSON仍然包含密钥“comments_readonly”,而不是想关键的“意见”。
采用了最新DRF,3.7.1
换句话说: 是否有可能创建一个有不同的特征上读串行场和写入,(只使用1个串行类)?