首页 > 解决方案 > 如何序列化 Django ManyToMany 字段中的特定字段?

问题描述

所以,我正在尝试为我的项目使用 Django Rest Framework。我有两个模型CategoryContent要序列化,如下:
views.py

class Category(models.Model):
    category_name = models.CharField(max_length = 20)

    def __str__(self):
        return self.category

class Content(models.Model):
    category = models.ManyToManyField(Category)
    body = models.TextField(blank=True, null=True)
    created_at = models.DateField(auto_now_add=True, null=True)
    
    def __str__(self):
        return self.created_at

序列化程序.py

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['category_name']

class ContentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Content
        fields = [
            'category', 'body', 'created_at',
            ]

现在的问题是,返回的 JSON 对象包含 中id的每个对象Category,而不是category_name. 因此,当我在前端 console.log 时,我得到了(例如)[1, 4, 8]但我需要的是(例如)['Wine', 'Beer', 'Whiskey']

我怎样才能做到这一点?提前致谢 :)

标签: pythondjangodjango-rest-framework

解决方案


你需要检查一下StringRelatedField我认为。

https://www.django-rest-framework.org/api-guide/relations/#stringrelatedfield

__str__您可以序列化模型中方法中定义的相关字段。


您还可以序列化该字段中的每个项目,例如:

{ id: 1, name: 'category name' }

您需要检查嵌套的序列化程序是否已完成:

https://www.django-rest-framework.org/api-guide/relations/#nested-relationships

例如:

你需要类似嵌套序列化器的东西,你可以从那里检查它:

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ("id", "name", ) # You can specify whatever fields you want here.

class ContentSerializer(serializers.ModelSerializer):
    category = CategorySerializer() # many=True if you want
    
    class Meta:
        model = Content
        fields = ("id", "category", "body", )

我想你想要的是StringRelatedField,返回字段哟。第二个,嵌套关系是额外的


推荐阅读