Python 如何在视图集使用的Django模型中添加列的自定义行级处理
这是我的模型,例如:Python 如何在视图集使用的Django模型中添加列的自定义行级处理,python,django,django-rest-framework,Python,Django,Django Rest Framework,这是我的模型,例如: class Lics(models.Model): files_id = models.IntegerField(blank=True, null=True) seqno = models.IntegerField(blank=True, null=True) expire = models.TextField(blank=True) 字段“expire”带有日期。我有一个函数,在调用api时从“现在”开始执行增量。调用Lics.objects.a
class Lics(models.Model):
files_id = models.IntegerField(blank=True, null=True)
seqno = models.IntegerField(blank=True, null=True)
expire = models.TextField(blank=True)
字段“expire”带有日期。我有一个函数,在调用api时从“现在”开始执行增量。调用Lics.objects.all()时,如何以及在何处在视图集中添加一个额外字段,该字段已添加为第四个字段,显示“天”=4,例如,如果许可证从现在起4天到期
预期输出:
[{files\u id:1,seqno:2,expire:'4-jan-2019','days':4}]
我可能会将其添加为一个序列化方法字段
,以便根据请求进行计算。事实上,这很类似于。您需要以下内容(注意:我没有测试过,它只是对文档化示例的一个轻微修改):
我可能会将其添加为一个
SerializerMethodField
,以便根据请求进行计算。事实上,这很类似于。您需要以下内容(注意:我没有测试过,它只是对文档化示例的一个轻微修改):
@RishiG有一个很好的解决方案。作为替代方案,还可以创建模型属性
class Lics(models.Model):
files_id = models.IntegerField(blank=True, null=True)
seqno = models.IntegerField(blank=True, null=True)
expire = models.TextField(blank=True)
@property
def days(self):
// calculation code goes here
然后,您只需在序列化程序的“fields”参数中包含“days”
class LicSerializer(serializers.ModelSerializer):
class Meta:
model = Lic
fields = ('files_id', 'seqno', 'expire', 'days')
我通常根据我希望访问这些数据的位置来决定我的方法。例如,如果我想直接对模型实例的
days
属性进行操作,我会将其放入模型中。如果我只关心在视图中冒泡这些数据,我会将其放入序列化程序。@RishiG有一个很好的解决方案。作为替代方案,还可以创建模型属性
class Lics(models.Model):
files_id = models.IntegerField(blank=True, null=True)
seqno = models.IntegerField(blank=True, null=True)
expire = models.TextField(blank=True)
@property
def days(self):
// calculation code goes here
class LicSerializer(serializers.ModelSerializer):
class Meta:
model = Lic
fields = ('files_id', 'seqno', 'expire', 'days')
然后,您只需在序列化程序的“fields”参数中包含“days”
class LicSerializer(serializers.ModelSerializer):
class Meta:
model = Lic
fields = ('files_id', 'seqno', 'expire', 'days')
我通常根据我希望访问这些数据的位置来决定我的方法。例如,如果我想直接对模型实例的
days
属性进行操作,我会将其放入模型中。如果我只关心在视图中冒泡这些数据,我会将其放入序列化程序。谢谢,这就是我要找的。太好了!很高兴这有帮助。当你有机会的时候,点击复选标记接受答案。谢谢你这就是我一直在寻找的。太好了!很高兴这有帮助。如果有机会,请单击复选标记以接受答案。
class LicSerializer(serializers.ModelSerializer):
class Meta:
model = Lic
fields = ('files_id', 'seqno', 'expire', 'days')