Django rest вложенный сериализатор не отображает поля - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть модели Workflow и WorkflowLevel.Каждый рабочий процесс имеет много уровней WOrkflow. Я пытаюсь использовать вложенный сериализатор:

class WorkflowLevelSerializer
(serializers.ModelSerializer):
class Meta:
    model = WorkflowLevel
    fields = '__all__'


class 
WorkflowSerializer
(serializers.ModelSerializer):

levels = WorkflowLevelSerializer(many=True)

class Meta:
    model = Workflow
    fields = ('id', 'name', 'description', 
'tenant', 'levels')

models.py:

class Workflow(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=32, default=None, null=True)
description = models.CharField(max_length=100, default=None, null=True)
tenant = models.ForeignKey(Tenant, on_delete=models.CASCADE, default=None, 
null=False)
class Meta:
    unique_together = ('name', 'tenant',)


class WorkflowLevel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, 
default=None, null=False)
level = models.IntegerField(default=None, null=False)
operation = models.CharField(max_length=32, default=None, null=False)
class Meta:
    unique_together = ('workflow', 'level',)

Поле уровней не отображается в представлении списка рабочих процессов API.Получение ошибки:

Got AttributeError when attempting to get a value 
for field `levels` on serializer 
`WorkflowSerializer`.
The serializer field might be named incorrectly 
and not match any attribute or key on the 
`Workflow` instance.
Original exception text was: 'Workflow' object 
has no attribute 'levels'.

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете определить related_name в модели следующим образом:

 workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, related_name="levels", default=None, null=False)

Я использую related_name='levels', так что в Serializer он будет использовать это имя обратной связи для выборки WorkflowLevel данные из БД.

...