sea*_*olf 4 django django-rest-framework
我在 Django 中有一个带有 IntegerField 的模型:
class MyModel(models.Model):
number = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
我使用 Django REST Framework 的模型序列化程序:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
Run Code Online (Sandbox Code Playgroud)
REST 框架创建的 JSON 是:
{
"number": null
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我只是按照收到的原样发回,则验证失败。为了使用接收到的 JSON 对象0而不是对象,我需要更改什么null?
正如 Mark Galloway 评论的那样,如果您的数据库中有空数据,则会出现空值。您可以通过更改序列化程序中的验证登录来解决此问题:
class MySerializer(serializers.ModelSerializer):
number = models.IntegerField(initial=0, allow_null=True)
class Meta:
model = MyModel
Run Code Online (Sandbox Code Playgroud)
或者通过改变数据被序列化回用户的方式:
class MyIntegerField(serializers.IntegerField):
def to_representation(self, value):
if value is None:
return 0
return super(MyIntegerField, self).to_representation(value)
class MySerializer(serializers.ModelSerializer):
number = MyIntegerField(initial=0)
class Meta:
model = MyModel
Run Code Online (Sandbox Code Playgroud)