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的标准行为。我将添加代码这是否回答了您的问题?