У меня есть следующие модели:
class Workflow(models.Model):
name = models.CharField(max_length=200)
class Task(models.Model):
name = models.CharField(max_length=200)
class TaskParameter(models.Model):
default_value = models.CharField(max_length=1000, null=True)
name = models.CharField(max_length=200)
task = models.ForeignKey(Task, related_name='parameters', on_delete=models.CASCADE, null=True)
class WorkflowTask(models.Model):
task = models.ForeignKey(Task, on_delete=models.CASCADE)
workflow = models.ForeignKey(Workflow, related_name='workflow_tasks', on_delete=models.CASCADE, null=True)
class WorkflowTaskParameter(models.Model):
value = models.CharField(max_length=1000)
workflow_task = models.ForeignKey(WorkflowTask, on_delete=models.CASCADE, related_name='workflow_task_parameters', null=True)
task_parameter = models.ForeignKey(TaskParameter, on_delete=models.CASCADE, related_name='+')
Итак, в основном я пытаюсь создать рабочие процессы, содержащие задачи (с помощью таблицы ассоциации WorkflowTask
), и эти задачи имеют параметры (TaskParameter
). Эти параметры имеют значение по умолчанию, но я хочу иметь возможность переопределить это значение по умолчанию другим (именно для этого предназначена таблица WorkflowTaskParameter
).
А вот мои сериализаторы:
class TaskParameterSerializer(serializers.ModelSerializer):
class Meta:
model = TaskParameter
fields = ('name', 'default_value')
class WorkflowTaskParameterSerializer(serializers.ModelSerializer):
name = serializers.StringRelatedField(many=False) # here i want the name from the associated TaskParameter
class Meta:
model = WorkflowTaskParameter
fields = ('name', 'value')
class WorkflowTaskSerializer(serializers.ModelSerializer):
task = serializers.StringRelatedField(many=False)
workflow_task_parameters = WorkflowTaskParameterSerializer(many=True, read_only=True)
class Meta:
model = WorkflowTask
fields = ('task', 'workflow_task_parameters')
class WorkflowSerializer(serializers.ModelSerializer):
workflow_tasks = WorkflowTaskSerializer(many=True, read_only=True)
class Meta:
model = Workflow
fields = ('name', 'workflow_tasks')
Я почти получаю желаемый результат:
{
"name": "MyWorkflow",
"workflow_tasks": [
{
"task": "MyTask",
"workflow_task_parameters": [
{
// missing the task parameter name here
"value": "myoverridedvalue"
}
]
}
]
}
Как упоминалось в комментариях, почему имя параметра задачи не появляется в результате, даже если я поставил "имя" StringRelatedfield
в WorkflowTaskParameterSerializer
? Это проблема дизайна?