我正在使用带有嵌套序列化器的django rest框架,我需要有关如何发布可以采用不同类型模型的对象的支持。
一个好的草图胜于一个漫长的演讲
我要发布:
{
"md5": "365v4a9e8fv4s9efb8",
"computer": "computer_name",
"branch": "git_branch",
"planKey": "Key",
"buildNumber": 25,
"pullRequest": false,
"result": [
{
"name": "name of the app",
"project": "name of project",
"mode": "release"
...
},
{
"name": "name of the app",
"project": "name of project",
"mode": "release"
...
}
]
}
或者这个:
{
"md5": "365v4a9e8fv4s9efb8",
"computer": "computer_name",
"branch": "git_branch",
"planKey": "Key",
"buildNumber": 25,
"pullRequest": false,
"result": [
{
"name": "name of the test",
"status": "fail",
"test_suite": "BB"
...
},
{
"name": "name of the test",
"status": "pass",
"test_suite": "AA"
...
}
]
}
在两种情况下,我都希望使用相同的第一个顶级模型JobResult。但是对于结果字段,我希望能够给出第一个模型(构建)或第二个模型(测试)
models.py:
class JobResult(models.Model):
md5 = models.CharField(max_length=255, default=None)
computer = models.CharField(max_length=255)
branch = models.CharField(max_length=255)
planKey = models.CharField(max_length=255)
buildNumber = models.IntegerField()
pullRequest = models.BooleanField(default=False)
# Generic Relation between JobResult and (Daily or Test)
content_type = models.ForeignKey(
ContentType,
on_delete=models.CASCADE,
related_name='result',
null=True,
blank=True,
)
object_id = models.PositiveIntegerField(null=True)
result_object = GenericForeignKey('content_type', 'object_id')
...
class Build(models.Model):
name = models.CharField(max_length=255)
project = models.CharField(max_length=255, default=None)
mode = models.CharField(max_length=255)
job_id = GenericRelation(JobResult, blank=True, null=True)
...
class Test(models.Model):
name = models.CharField(max_length=50)
status = models.CharField(max_length=50)
test_suite = models.CharField(max_length=50)
job_id = GenericRelation(JobResult, blank=True, null=True)
...
我已经尝试使用通用的foreignKey,如您所见,并参考了这篇文章: Django Rest Framework: Writable nested serializers with Generic Foreign Key
我真的不知道我做对与否。我对所有帖子和答案感到很迷失,我们可以从堆栈溢出或谷歌获得答案。我不知道从哪里知道...
我不会显示我的serializers.py,因为它与上面引用的对我的模型进行修改的链接相同。
最后但并非最不重要。我已经从django rest frammework docs:https://www.django-rest-framework.org/api-guide/relations/做了一个可写的嵌套序列化程序,它确实起作用了。我能够使用构建模型发布json。
那我该怎么办?我说对了吗?谁能告诉我在哪里寻找这位事物之王?
请毫不犹豫地告诉我我是否完全误解了。我对此很陌生。
答案 0 :(得分:0)
您可以通过引用父序列化器中的methodfield来执行此操作,对于其get方法,您可以调用与之相关的其他模型的子序列化器:
sizeof