使用Django Rest Framework,我试图通过POST添加一个模型对象,指定新对象应该有一个外键的现有对象的ID。作品。但是,如果我将depth = 1添加到新对象的序列化程序中,以便在GET中获取外键目标,则添加新对象的POST会失败并显示mysql错误'IntegrityError:(1048,“Column'reportdefinition_id'can not即使我在我的POST中指定了一个有效的外键ID,也是null)。Django Rest Framework使用外键和深度添加对象= 1
我可以通过将depth = 1取出并在客户端单独检索reportdefinition来解决此问题,但这很麻烦。
(我发现了两个相关的问题,但是没有回答我的: Django REST - Create object with foreign key using serializers Need to show Foreign Key Object in Details by Django Rest Framework)
模型(我还没有显示不相关的字段):
class ReportDefinition(models.Model):
name = models.CharField(max_length=254, blank=True, null=True)
class ReportRun(models.Model):
status = models.IntegerField(default=2)
reportdefinition = models.ForeignKey(ReportDefinition)
串行器:
class ReportDefinitionSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = models.ReportDefinition
fields = ("id","name")
class ReportRunSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
depth = 1
model = models.ReportRun
fields =("id","status","reportdefinition")
如果我删除'深度= 1',则POST工作。
class ReportRunSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = models.ReportRun
fields =("id","status","reportdefinition")
的POST内容(再次,不相关的其他属性未示出):
reportdefinition:1
一件事我注意到:无需深度= 1时,DRF可浏览的API示出了在它的默认 “reportdefinition”,但是深度= 1,它不会。我必须明确地添加它。
DRF阅览API含量随深度= 1:
{
"status": null,
}
(I增加 “reportdefinition”:1发出POST时,并验证其显示使用Chrome开发者工具)
DRF阅览API内容,因为没有 '深度= 1':
{
"status": null,
"reportdefinition": null
}
(I发出POST时用1代替零)