我是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
字段?
[在模型中,您将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=True
在form
级验证中起作用。