Skip to main content
 首页 » 编程设计

python之Django Rest Framework 递归嵌套父序列化

2025年05月04日31小虾米

我有一个模型,它有一个名为 parent 的自引用字段。 型号:

class Zone(BaseModel): 
    name = models.CharField(max_length=200) 
    parent = models.ForeignKey('self', models.CASCADE, blank=True, null=True, related_name='children') 
 
    def __unicode__(self): 
        return self.name 

序列化器:

class ZoneSerializer(ModelSerializer): 
    parent = PrimaryKeyRelatedField(many=False, queryset=Zone.objects.all()) 
    parent_disp = StringRelatedField(many=False, source="parent") 
 
    class Meta: 
        model = Zone 
        fields = ('id', 'name', 'parent', 'parent_disp') 

现在我想序列化区域的父级及其父级和它的父级直到父级为无。 我为 child 找到了递归序列化方法,但没有为 parent 找到递归序列化方法。 我该怎么做?

请您参考如下方法:

好的,我就这样工作了。

class ZoneSerializer(ModelSerializer): 
    parent = SerializerMethodField() 
 
    class Meta: 
        model = Zone 
        fields = ('id', 'name', 'project', 'parent',) 
 
    def get_parent(self, obj): 
        if obj.parent is not None: 
            return ZoneSerializer(obj.parent).data 
        else: 
            return None