Django读/写串行器,用于递归与通过字段的多对多关系

时间:2017-08-25 17:25:47

标签: python django django-rest-framework

所以我有一个表示“Assembly”的模型,其中一个程序集可以有任意数量的子程序集,并且对于每个子程序集,它指定它包含的子程序集的实例数。例如,A包含1 B和2 C,而B包含1 D,C不包含任何内容,D不包含任何内容。我在模型中代表了这一点:

from django.db import models

class Assembly(models.Model):
    guid = models.CharField(max_length=40, unique=True, primary_key=True)
    subassemblies = models.ManyToManyField('self', blank=True, symmetrical=False,
                                           through='AssemblyLink',
                                           through_fields=('parent', 'child'))

class AssemblyLink(models.Model):
    parent = models.ForeignKey(Assembly, on_delete=models.CASCADE, related_name='child_link_set')
    child = models.ForeignKey(Assembly, on_delete=models.CASCADE, related_name='parent_link_set')
    count = models.PositiveSmallIntegerField()  # Small means <32k

这似乎有效,但我无法弄清楚如何编写序列化程序,以便它可以读取JSON来创建模型,并将模型转换回JSON。我希望能够阅读看起来像的JSON:

{
    "guid": "GUID123",
    "subassemblies": [
        {"child": "GUID1234", "count": 1}
    ]
}

虽然这种格式很灵活。现在我的AssemblySerializer看起来像这样:

class AssemblySerializer(serializers.ModelSerializer):
    subassemblies = ...

    class Meta:
        model = Assembly
        fields = ('guid', 'subassemblies')

我应该如何填写......以使其发挥作用?

0 个答案:

没有答案