我的模特:
Assets(modes.Model):
assset_code=models.CharField(max_length=12,null=True,blank=True)
在我的serializers.py中:
asset_code=serializers.CharField(max_length=12,allow_blank=True,required=False)
当我发布数据时,它仍然说这个字段可能不为空。只有在我输入数据时才允许我通过。
虽然我在使用它,但是在序列化器中使JSONField()可选的正确方法是什么?
答案 0 :(得分:0)
避免在字符串字段中使用null=True
,如果您只需要在{0}下设置null=True
以下null
,请查看django {{3} }
Django文档:
一个例外是CharField同时具有unique = True和blank = True 组。在这种情况下,需要null = True以避免唯一 使用空值保存多个对象时出现约束违规。
设置blank=True
(django模型和表单),allow_blank=True
(DRF)足以让django表单,django admin和Django REST Framework了解这个字段不是必需的,字段值将是在数据库中保存为空字符串。
同样适用于Django REST Framework中的null
避免使用allow_null=True
,请检查documentation
Django REST框架文档:
不鼓励使用allow_blank。设置是有效的 allow_blank = True和allow_null = True,但这样做意味着 允许有两种不同类型的空值 字符串表示,可能导致数据不一致和 微妙的应用程序错误。
因此,您的asset_code
参数以及遵循相同方案的任何未来字符串字段,blank=True
对于django模型来说已经足够了,allow_blank=True
足以用于DRF。
# models.py
assset_code = models.CharField(max_length=12, blank=True)
# serializer.py
assset_code = serializers.CharField(max_length=12, allow_blank=True)