null = True,blank = True但在post期间每次都会引发仍然错误

时间:2018-03-10 20:38:20

标签: django

我的模特:

    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()可选的正确方法是什么?

1 个答案:

答案 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)