【问题标题】:How to make the category itself in the Parent Category and not just the id如何在父类别中创建类别本身而不仅仅是 id
【发布时间】:2021-05-30 12:25:37
【问题描述】:

我正在使用 Django Rest Framework for API,我编写了我有父级的模型类别,我正在使用它:parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) 在 API 中它看起来像这样:

{
    "id": 7,
    "name": "softwares",
    "img": "",
    "parent": 1
},
{
    "id": 8,
    "name": "databases",
    "img": "",
    "parent": 1
},
{
    "id": 9,
    "name": "appearance",
    "img": "",
    "parent": 2
},
{
    "id": 10,
    "name": "media",
    "img": "",
    "parent": 2
},
{
    "id": 11,
    "name": "system",
    "img": "",
    "parent": 2
},

这里是类别序列化器:

class CategorySerializer(serializers.ModelSerializer):

    class Meta:
        model = Category
        fields = '__all__'

和分类视图集:

class CategoryViewSet(viewsets.ModelViewSet):

    queryset = Category.objects.all()
    serializer_class = CategorySerializer

    action_to_serializer = {
        "retrieve": CategoryDetailSerializer,
    }

    def get_serializer_class(self):
        return self.action_to_serializer.get(
            self.action,
            self.serializer_class
        )

如何制作类别本身而不仅仅是 id?

【问题讨论】:

  • 您是否希望将"id" 改为"category

标签: python json django django-rest-framework


【解决方案1】:

假设您不会处理无限序列的关系并且只使用一个级别的育儿来处理它,您可以通过使用nested serializers 来实现这一点,您的场景示例如下:

class NestedCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ('id', 'name', 'img')

class CategorySerializer(serializers.ModelSerializer):
    parent = NestedCategorySerializer()

    class Meta:
        model = Category
        fields = '__all__'

如果您的关系需要更多深度级别,您可以改进此示例以始终包含序列化父级 - 小心循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多