序列化Django Rest框架时的其他字段 [英] Additional field while serializing django rest framework

查看:86
本文介绍了序列化Django Rest框架时的其他字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是django rest框架的新手,并且创建了示例 Employee 模型。

I am a newbie to django rest framework and have created a sample Employee model.

我的 models.py

class Employees(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

我的 serializers.py

class EmployeeSerializer(serializers.Serializer):
    class Meta:
        model = Employees
        fields = ('first_name','last_name')

这可以正常工作,但是我想要一个附加字段 full_name ,它将是 first_name + last_name

This works fine but I want an additional field full_name, which will be first_name + last_name.

如何在我的<$ c $中定义此新字段全名 c> serializers.py ?

How do I define this new field full_name in my serializers.py?

推荐答案

我在这里看到两种方法(我喜欢第一种方法,因为您可以在其他地方重用它应用程序的其他部分):

I see two ways here (I prefer the first way since you can reuse it in other parts of the app):

将计算出的属性添加到模型中,并将其添加到序列化器中
通过使用带有source =

# models.py
class Employees(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    @property
    def full_name(self):
        return self.first_name + self.last_name

#serializes.py
class EmployeeSerializer(serializers.ModelSerializer):
    full_name = serializers.Field(source='full_name')

    class Meta:
        model = Employees
        fields = ('first_name','last_name', 'full_name')

通过使用 SerializerMethodField
(您的模型不变)

by using SerializerMethodField (your model unchanged)

class EmployeeSerializer(serializers.ModelSerializer):
    full_name = serializers.SerializerMethodField('get_full_name')

    def get_full_name(self, obj):
        return obj.first_name + obj.last_name

    class Meta:
        model = Employees
        fields = ('first_name','last_name', 'full_name')

这篇关于序列化Django Rest框架时的其他字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆