Django REST Framework 将 'null' 替换为 IntegerField 中的 0

标签 django django-rest-framework

我在 Django 中有一个带有 IntegerField 的模型:

class MyModel(models.Model):
    number = models.IntegerField(default=0)

我使用 Django REST Framework 的模型序列化程序:
class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel

REST 框架创建的 JSON 是:
{
    "number": null
}

问题是,如果我只是按照收到的原样发回,则验证失败。为了让接收到的 JSON 对象使用 0,我要更改什么?而不是 null对于一个对象?

最佳答案

正如 Mark Galloway 评论的那样,如果您的数据库中有空数据,则会出现空值。您可以通过更改序列化程序中的验证登录来解决此问题:

class MySerializer(serializers.ModelSerializer):
    number = models.IntegerField(initial=0, allow_null=True)
    class Meta:
        model = MyModel

或者通过改变数据被序列化回用户的方式:
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

关于Django REST Framework 将 'null' 替换为 IntegerField 中的 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31328467/

相关文章:

python - 在 django admin 中保留用户的选择

ios - UIWebView 与 Django

python - Django休息框架: Could not resolve URL for hyperlinked relationship using view name "post-detail"

python - multiplechoicefield - 如何更新每个页面加载的选项列表

django - 如何在Django allauth中禁用中间退出页面

django - 如何在 django 1.9+ 中合并连续的数据库迁移?

python - django 身份验证注销功能是否删除 django_session 表中的 session 行?

python - TemplateDoesNotExist - Django 错误

python - Django REST 框架 : get field of related model in serializer

python - Django休息框架: How serialize two models queryset?