好吧,我有模型:
class Application(models.Model):
name = models.CharField("nom", unique=True, max_length=255)
sonarQube_URL = models.CharField("Url SonarQube", max_length=255,
blank=True, null=True)
def __unicode__(self):
return self.name
和序列化程序:
class ApplicationSerializer(serializers.ModelSerializer):
nom = serializers.CharField(source='name', required=True, allow_blank=True)
url_sonarqube = serializers.CharField(source='sonarQube_URL', required=False)
flows = FlowSerializer(many=True, read_only=True)
class Meta:
model = Application
fields = ('id', 'nom', 'url_sonarqube', 'flows')
我的观点很简单:
class ApplicationViewSet(viewsets.ModelViewSet):
queryset = Application.objects.all()
serializer_class = ApplicationSerializer
我在 settings.py :
中使用此权限模式REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.DjangoModelPermissions',),
'PAGE_SIZE': 10,
'TEST_REQUEST_DEFAULT_FORMAT': 'json',
'TEST_REQUEST_RENDERER_CLASSES': (
'rest_framework.renderers.MultiPartRenderer',
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.TemplateHTMLRenderer'
)
}
当我在DRF界面上使用POST操作时(在HTML表单中),我填写了应用程序项的所有字段。如您所见,“nom”的“required”参数设置为True。而且,这就是问题所在:即使'nom'不为空,DRF也说“这个领域是必需的!”。所以,我不能POST一个新的应用程序项。 我不明白为什么它不起作用......错误在哪里?
答案 0 :(得分:1)
尝试将您的代码保留为英文,您可以使用Django的i18n翻译内容,也可以使用空白和null作为您的姓名字段:
class Application(models.Model):
name = models.CharField(_('name'), max_length=255, blank=True, null=True)
sonarqube_url = models.CharField(_('SonarQube URL'), max_length=255, blank=True, null=True)
def __unicode__(self):
return self.name
class ApplicationSerializer(serializers.ModelSerializer):
class Meta:
model = Application
fields = ('id', 'name', 'sonarqube_url')
让我们稍后保存流量,因为你甚至没有它们的模型关系。
答案 1 :(得分:1)
您收到的错误与Django Model(Application)
有关。它在模型级别而不是在序列化程序级别中失败。将null=True
和blank=True
添加到name
模型中的Application
字段。