首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django Rest框架中的许多任意字段中获取序列化程序中的键的值?

如何在Django Rest框架中的许多任意字段中获取序列化程序中的键的值?
EN

Stack Overflow用户
提问于 2019-03-09 10:41:45
回答 1查看 142关注 0票数 1

我在序列化期间显示数据时遇到了问题。

这是我的模型:

代码语言:javascript
复制
from django.db import models

class Paradigmn(models.Model):
    name = models.CharField(max_length=50)

def __str__(self):
    return self.name

class Language(models.Model):
    name = models.CharField(max_length=50)
    paradigm = models.ForeignKey(Paradigmn, on_delete=models.CASCADE)

def __str__(self):
    return self.name

class Programmer(models.Model):
    name = models.CharField(max_length=50)
    languages = models.ManyToManyField(Language, related_name='languages')

def __str__(self):
    return self.name

这是我的序列化程序:

代码语言:javascript
复制
from languages.models import Language, Paradigmn, Programmer

class LanguageSerializer(serializers.ModelSerializer):
    paradigms = serializers.ReadOnlyField(source='paradigm.name')

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

class ParadigmnSerializer(serializers.ModelSerializer):

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

class ProgrammerSerializer(serializers.ModelSerializer):
    languages = LanguageSerializer(many=True, read_only=True)

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

这就是结果:

代码语言:javascript
复制
[
 {
    "id": 1,
    "name": "Ryan",
    "languages": [
        {
            "id": 1,
            "name": "Java",
            "paradigms": "Object-Oriented"
        }
    ]
},
{
    "id": 2,
    "name": "Jean",
    "languages": [
        {
            "id": 3,
            "name": "Python",
            "paradigms": "Object-Oriented"
        }
    ]
},
{
    "id": 3,
    "name": "Michael",
    "languages": [
        {
            "id": 2,
            "name": "Elixir",
            "paradigms": "Functional"
        }
    ]
}

我只想在语言数组上显示语言的名称,而不是语言数组的所有细节。对此最好的解决方案是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-03-09 11:52:48

一种解决方案:

代码语言:javascript
复制
from rest_framework.serializers import SerializerMethodField

class ProgrammerSerializer(serializers.ModelSerializer):
    languagelist = SerializerMethodField()

    def get_languagelist(self, obj):
        return [{'name': i.name} for i in obj.languages.all()]

    class Meta:
        model = Programmer
        fields = ('id', 'name', 'languagelist') 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55073500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档