django外键不能为空

问题描述 投票:0回答:1

我是django的初学者,并尝试在django rest-framework上创建发布请求。

我有以下模型:

class ProjectScheme(models.Model):

    name = models.CharField(max_length=250, blank=False,null=False)
    parent_scheme_id = models.ForeignKey(ProjectSchemeMaster, on_delete = models.CASCADE)
    rule = models.TextField(blank=True)

    def __str__(self):
        return str(self.name)

和一个序列化器:

class SchemeDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = ProjectScheme
        fields = ('id', 'name', 'parent_scheme_id', 'rule')
        depth=1

我的观点:

@api_view(['POST'])
@renderer_classes((JSONRenderer,))
def create_project_scheme(request):

    if request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = SchemeDetailSerializer(data=data)
        comp_logger.info('Call to create_project')

        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)

        else:               
            return Response({'response':serializer.errors})
    return Response({})

使用post request body as

{
    "name": "django-rf"
}

这将serializer.is_valid()赋予true,但作为响应,我得到

(1048, "Column 'parent_scheme_id_id' cannot be null")

我尝试添加parent_scheme_id = models.ForeignKey(ProjectSchemeMaster, on_delete = models.CASCADE, blank=False, null=False),但是没有任何区别。

如何验证请求输入,以使其显示正确的验证消息,例如name字段?

python django django-models django-rest-framework django-serializer
1个回答
0
投票

[在模型中,您将ForeignKey字段设置为必填字段,如果没有明确提供required=True,则Django默认情况下考虑字段null=True。因此,如果要创建不具有ForeignKey引用的ProjectScheme实例,请确保在[ForeignKey]字段中提供null=True

class ProjectScheme(models.Model):
    name = models.CharField(max_length=250, blank=False,null=False)
    parent_scheme_id = models.ForeignKey(ProjectSchemeMaster, null=True, blank=True, on_delete = models.CASCADE)
    rule = models.TextField(blank=True)

    def __str__(self):
        return str(self.name)

提一下,blank=Trueform级验证中起作用。

© www.soinside.com 2019 - 2024. All rights reserved.