Я работаю над фреймворком 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.Но для поля результата я хочу иметь возможность указать первую модель (Build) или вторую (Test)
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: записываемые вложенные сериализаторы с общим внешним ключом
Я действительно не знаю, правильно ли я поступаю или нет.Я потерял все посты и ответы, которые мы можем получить из переполнения стека или из Google.Я не знаю, откуда идти, знаю ...
я не покажу свой serializers.py, потому что он такой же, как ссылка, указанная выше, с модификацией для моих моделей.
Последнее, но не менее важное.Я уже сделал записываемые вложенные сериализаторы из документации django rest frammework: https://www.django -rest-framework.org / api-guide / Relations / , и это сработало.я смог ПОСТАВИТЬ JSON с моделью сборки.
Так что мне делать?Я иду правильно?Может кто-нибудь сказать мне, где искать этого короля вещей?
Не стесняйтесь сказать мне, если я полностью ошибаюсь.я тихий новичок в этом.