【问题标题】:Django rest multiple nested RelatedDjango rest 多个嵌套相关
【发布时间】:2026-01-05 16:05:01
【问题描述】:

我有 3 个表 ProvinceCommuneDistrict 相互链接。

Province hasMany District
District hasMany Commune

当访问我的 api url api/v1/province/ 时,我得到了这样的数据

[
    {
        "id": 1,
        "name_eng": "Banteay Meanchey",
        "name_kh": "បន្ទាយមានជ័យ",
        "district": [
            {
                "id": 1,
                "name_eng": "Mongkol Borei",
                "name_kh": "មង្គលបុរី",
                "province": 1
            },
            {
                "id": 3,
                "name_eng": "Malay",
                "name_kh": "មា៉ឡៃ",
                "province": 1
            }
        ]
    },
]

我想让它像这样嵌套多个

[
    {
        "id": 1,
        "name_eng": "Banteay Meanchey",
        "name_kh": "បន្ទាយមានជ័យ",
        "district": [
            {
                "id": 1,
                "name_eng": "Mongkol Borei",
                "name_kh": "មង្គលបុរី",
                "province": 1
               "commune": [
                  "id": 1,
                  "name_eng": "Mongkol Borei",
                  "name_kh": "មង្គលបុរី",
               ]
            },       
        ]
    },

这样可以吗??? My Model

class Province(models.Model):
    name_eng = models.CharField(max_length=50)
    name_kh = models.CharField(max_length=50)


class District(models.Model):
    province = models.ForeignKey(
        Province, on_delete=models.CASCADE, related_name="district")
    name_eng = models.CharField(max_length=50)
    name_kh = models.CharField(max_length=50)


class Commune(models.Model):
    district = models.ForeignKey(
        District, on_delete=models.CASCADE, related_name="commune")
    name_eng = models.CharField(max_length=50)
    name_kh = models.CharField(max_length=50)

My Serializer

class ProvinceSerializer(serializers.ModelSerializer):
    # commune = serializers.SerializerMethodField()

    class Meta:
        model = Province
        fields = ['id', 'name_eng', 'name_kh', 'district']
        depth = 1


class DistrictSerializer(serializers.ModelSerializer):
    class Meta:
        model = District

        fields = ['id', 'name_eng', 'name_kh', 'commune']
        # fields = '__all__'
        depth = 1


class CommuneSerializer(serializers.ModelSerializer):
    class Meta:
        model = Commune
        # fields = '__all__'
        fields = ['id', 'name_eng', 'name_kh', 'district']
        depth = 1

感谢您的帮助。谢谢:)

【问题讨论】:

    标签: django django-models django-rest-framework model


    【解决方案1】:

    是的,django 有可能做到这样的事情。 为了制作这个模型/序列化器,你应该使用嵌套关系(根据 DRF documentation

    您应该将您的 serializer.py 更改为:

    class CommuneSerializer(serializers.ModelSerializer):
        class Meta:
            model = Commune
            fields = ['id', 'name_eng', 'name_kh']
            depth = 1
    
    
    class DistrictSerializer(serializers.ModelSerializer):
        commune = CommuneSerializer(many=True)
        class Meta:
            model = District
            fields = ['id', 'name_eng', 'name_kh', 'commune']
            depth = 1
    
    
    class ProvinceSerializer(serializers.ModelSerializer):
        district = DistrictSerializer(many=True)
        class Meta:
            model = Province
            fields = ['id', 'name_eng', 'name_kh', 'district']
            depth = 1
    

    【讨论】: