Django读/写序列化程序,用于与through字段的递归manytomy关系

2024-06-30 07:58:47 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个表示“装配”的模型,其中一个装配可以有任意数量的子装配,对于每个子装配,它指定它包含该子装配的多少个实例。例如,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')

我该如何填写。。。为了让这个工作?你知道吗


Tags: 模型jsonchildtrue内容fieldsmodelmodels