如何从django中具有@property装饰器的模型类序列化函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从django中具有@property装饰器的模型类序列化函数相关的知识,希望对你有一定的参考价值。
我正在使用django_rest框架,我想知道如何序列化具有@property装饰器的函数。在这种情况下,从下面的代码我有total_salary
class SalaryDetail(models.Model):
employee = models.ForeignKey(Employee)
year = models.IntegerField()
month = models.CharField(max_length=2,
choices=MONTH_CHOICES)
basic = models.PositiveSmallIntegerField()
da = models.PositiveSmallIntegerField()
hra = models.PositiveSmallIntegerField()
allowance = models.PositiveSmallIntegerField(default=0)
loss_of_pay = models.PositiveSmallIntegerField(default=0)
repayment_of_loan = models.PositiveSmallIntegerField(default=0)
@property
def total_salary(self):
return self.basic + self.da + self.hra + self.allowance
我知道在serializers.py
中,我将从做这样的事情开始:
class SalaryDetailSerializer(serializers.ModelSerializer):
class Meta:
model: SalaryDetail
答案
您可以使用read_only设置为true的IntegerField()
,
class SalaryDetailSerializer(serializers.ModelSerializer):
total_salary = serializers.IntegerField(read_only=True)
class Meta:
model = SalaryDetail
fields = ('total_salary',)
另一答案
解决方案是,定义一个SerializerMethodField()
如下,
class SalaryDetailSerializer(serializers.ModelSerializer):
total_salary = serializers.SerializerMethodField()
def get_total_salary(self, model):
return model.total_salary()
class Meta:
model = SalaryDetail
fields = ('total_salary',)
以上是关于如何从django中具有@property装饰器的模型类序列化函数的主要内容,如果未能解决你的问题,请参考以下文章
关于路径和自定义装饰器的 Python3 Django 问题
Python,如何添加另一个装饰器来过滤现有多装饰器的输出与python中的属性?