DRF中null = False字段的序列化器行为

时间:2020-10-23 11:15:12

标签: django django-rest-framework

我遇到了一个我不太明白的奇怪行为。对于模型

class Tenant:
    name = models.CharField(max_length=155)
    country = models.CharField(max_lengh=155)

我正在使用此序列化器:

class Serializer(serializers.ModelSerializer):
    class Meta:
        model = Tenant
        fields = (name,)

此设置将使我可以保存没有提供国家/地区的租户实例,即使应该在数据库级别(Postgres)上实施null=True。仅当我在字段中添加country时,它才会强制执行null=False约束。

这对我来说似乎很不直观。


编辑:这是我的问题的简单代码示例:

class AppModel(models.Model):
    name = models.CharField(max_length=255)
    country = models.CharField(max_length=255)

class CrateAppModel(APIView):

    def post(self, request, format=None):
        serializer = AppModelSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

class AppModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = AppModel
        fields = (
            "name",
        )

使用简单的发帖请求,我可以创建一个没有国家/地区字段的实例。 我不明白为什么?。在我的数据库中,country类型为字符串,为空。

0 个答案:

没有答案