Django DRF中具有null=False字段的序列化程序行为

Django DRF中具有null=False字段的序列化程序行为,django,django-rest-framework,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,

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

class Tenant:
    name = models.CharField(max_length=155)
    country = models.CharField(max_lengh=155)
我正在使用此序列化程序:

class Serializer(serializers.ModelSerializer):
    class Meta:
        model = Tenant
        fields = (name,)
此设置将允许我保存未提供国家/地区的租户实例,即使应在DB级别(Postgres)强制执行
null=True
。只有当我将
country
添加到字段时,它才会强制执行
null=False
约束

这对我来说似乎很不直观


Edit:下面是我的问题的一个简单代码示例:

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",
        )

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

在此设置中,DRF不会引发任何验证错误,但在调用序列化程序的
save()
方法时,PostgreSQL将引发错误,因此对于我的用例,Django Too确实不会引发错误。某些内部内容正在用空字符串填充字段。这真让我担心。但是我的代码中没有任何东西可以解释这一点。我无法通过使用完全相同的设置重现这个问题,您介意添加一个最小的可重现示例吗?好的,我只是用一个标准应用程序构建了一个小示例。这似乎是Django的标准行为。我将添加代码这是否回答了您的问题?