【发布时间】:2020-06-22 16:03:58
【问题描述】:
我正在使用 Django 2.2
我有一个带有布尔字段的模型
class MyModel(models.Model):
is_active = models.BooleanField(default=True, blank=True)
和序列化器
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = [
'is_active'
]
def validate(self, attrs):
print('attrs: {}'.format(attrs))
return super().validate(attrs)
def create(self, validated_data):
print('validated_data: {}'.format(validated_data))
return super().create(validated_data)
即使模型is_active 字段默认设置为True,validate() 方法中的attrs 和create() 方法中的validated_data 包含is_active 为False 如果@987654331 @ 没有与请求一起明确发送。
要将默认设置为True,我需要在序列化器类中显式添加序列化器字段
is_active = serializers.BooleanField(default=True, required=False)
为什么不设置模型字段的默认值?
【问题讨论】:
-
validate方法中的打印输出是什么? -
它给了
{'is_active': False} -
有效载荷是什么?
-
Payload 不包含
is_active字段。从fields列表中删除is_active也可以正常工作,并且正在保存默认值。
标签: django django-rest-framework