Django Rest嵌套序列化器不显示字段

时间:2019-02-13 06:29:53

标签: django django-rest-framework

我有一个模型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',)

级别字段未显示在工作流listAPI视图中。 出现错误:

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 :(得分:1)

您可以像这样在模型中定义related_name

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

我正在使用related_name='levels',因此在序列化器中,它将使用该反向关系名称从数据库中获取WorkflowLevel数据。