Django 如何对模型字段执行计算并在模板中显示值?

Django 如何对模型字段执行计算并在模板中显示值?,django,django-templates,django-views,Django,Django Templates,Django Views,我有一个名为“候选者”的模型,其中包含“经验”、“新经验”、“发布日期”等字段。 我正在使用CreateView表单将值存储在数据库中。 当我第一次输入experience和date_posted(设置为timezone.now)时,“新体验”值默认也应设置为“experience”值。 现在这个“新体验”值应该在每个月之后增加 比如说,, 经验=2.4(2年4个月), 新体验=2.4(自动设置) 因此,如果我在1个月后打开模板(网站页面),则“经验”和“发布日期”值必须相同,但“新经验”值=2

我有一个名为“候选者”的模型,其中包含“经验”、“新经验”、“发布日期”等字段。

我正在使用CreateView表单将值存储在数据库中。 当我第一次输入experience和date_posted(设置为timezone.now)时,“新体验”值默认也应设置为“experience”值。 现在这个“新体验”值应该在每个月之后增加

比如说,, 经验=2.4(2年4个月), 新体验=2.4(自动设置)

因此,如果我在1个月后打开模板(网站页面),则“经验”和“发布日期”值必须相同,但“新经验”值=2.5(2年,5个月)

另外,我想使用2.12(2年12个月)和3.1(2年13个月)的格式。
如何实现这一点?

也许您可以将您的
新体验设置为计算属性,而不是普通字段

from datetime import datetime

class Candidate:
    # ...
    experience = models.DateField()

    @property
    def new_experience(self):
        now = datetime.now().date()
        delta = now - self.date_posted
        return (self.experience + delta)
更新 在您在评论中作出澄清后,我的建议是将
经验
领域分为几年和几个月:

class Candidate:
    # ...
    experience_years = models.IntegerField()
    experience_months = models.IntegerField()



    @property
    def new_experience(self):
        base_experience = datetime.datetime(year=self.expreience_years, month=self.experience_months, day=1)
        delta = datetime.datetime.now() - self.date_posted
        new_experience = base_experience + delta
        # now you can access new_experience.year, new_experience.month
        return new_experience
另一个选项是返回一个来自新经验的
元组
(年、月)
,如上所述


警告:又快又脏但未测试

哦,但这会给我2.1、2.2等格式的值吗?比如,如果我把经验作为一个日期字段,那么它将在日期格式(dd/mm/yy)中有一个特定的值,如果我从当前日期中减去它,我将得到一个日期格式,再次加回去只会给我当前日期,不是吗?你是对的:)我应该使用
date\u posted
而不是experience来减去它,请查看更新的答案,然后您可以使用a按您的意愿显示它。是否“体验”仍然是一个日期字段?我以前把它作为CharField保存,因为它只需要存储2.1、2.2等值。基本上,我用它来为求职者找工作。所以我需要存储他的详细信息并保持跟踪。如果在发布的日期,他的工作经验是5年,如果我在5个月后查看他的个人资料,那么他的工作经验实际上是5.5年。这就是为什么我用新的经验来存储它。
class Candidate:
    # ...
    experience_years = models.IntegerField()
    experience_months = models.IntegerField()



    @property
    def new_experience(self):
        base_experience = datetime.datetime(year=self.expreience_years, month=self.experience_months, day=1)
        delta = datetime.datetime.now() - self.date_posted
        new_experience = base_experience + delta
        # now you can access new_experience.year, new_experience.month
        return new_experience