处理 Django REST Framework 中不同级别的嵌套

2024-04-15

例如,如果您采用模型:

class Region(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)

class Company(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)
    region = models.ForeignKey('Region', db_index=True)

class Staff(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)
    company = models.ForeignKey('Company', db_index=True)

我知道我不需要在这些模型中包含 id,但我这样做是为了让它更清楚。

在此示例中,有时您只想返回区域列表。其他时候,您可能希望返回一个区域列表,其中包含每个区域下的每个区域的公司列表。

我想,您还需要更多详细信息,其中包含区域、其 Company 子代以及每个 Company 的 Staff 子代的列表。

就其余框架视图而言,处理这些不同级别的深度/细节的最佳方法是什么。人们通常如何处理这个问题?

我的意思是,当您说三个视图在顶层返回相同的内容时,您会使用什么样的命名约定,唯一的区别是它们包含多少层嵌套?


简单地返回列表区域

-->使用简单的序列化器许多=真调用它时(这将返回字典列表)

class SimpleRegionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Region
        fields = ('id', 'name')

用于获取区域列表以及每个区域下每个区域的公司列表

-->使用嵌套序列化器

 class CompanySerializer(serializers.ModelSerializer):
     class Meta:
         model = Company
         fields = ('id', 'name')

 class NestedRegionSerializer(serializers.ModelSerializer):
     company = CompanySerializer(many=True, read_only=True)

     class Meta:
         model = Region
         fields = ('id', 'name')

还将公司模型更改为

 class Company(models.Model):
     id = models.AutoField(primary_key=True)
     name = models.CharField(max_length=256)
     region = models.ForeignKey('Region', db_index=True, related_name='company')

related_name 与 NestedRegionSerializer 中的序列化器字段相同。

不要忘记运行迁移或syncdb

欲了解更多信息,请参阅http://www.django-rest-framework.org/api-guide/relations/#nested-relationships http://www.django-rest-framework.org/api-guide/relations/#nested-relationships以供更多参考。

您可以使用任何级别的嵌套,如果需要,您还可以指定“深度”作为元选项,它将提供有关嵌套深度的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理 Django REST Framework 中不同级别的嵌套 的相关文章

随机推荐