模型序列化器的验证

时间:2018-06-08 12:09:54

标签: django django-rest-framework django-serializer django-validation

我必须修改ModelSerializer的功能,我的期望是,

我的模型中有两个字段。两者都是charFields。

class MyModel(models.Model):
    name = models.CharField(blank=False,
                            null=False,
                            max_length=20)
    value = models.CharField(blank=True,
                             null=True,
                             max_length=20)

我的序列化器是,

class MyModelSerializer(ModelSerializer):

    class Meta: 
        model = MyModel
        fields = '__all__'

我必须使用此序列化程序创建MyModel的对象。

现在的问题是,如果我在我的字段中传递'bool'值,则显示错误消息'Not a valid string。' (正如Modelserializer所预期的那样)

  

{“name”:True,“value”:False}

我的要求是处理'bool'值并将'bool'转换为'str'。应该解决这个问题的诀窍。

1 个答案:

答案 0 :(得分:0)

使用 to_internal_value 功能,例如,这有效:

class MyModelSerializer(ModelSerializer):
class Meta:
    model = MyModel
    fields = '__all__'

def to_internal_value(self, data):
    for field in ('name', 'value'):
        if field in data and isinstance(data[field], bool):
            data[field] = str(data[field])
    return super().to_internal_value(data)