python - Django 自定义保存模型

标签 python django

我正在尝试在 django 的保存模型中执行基本日期计算,请参见以下代码:

  class Purchase(models.Model):
    purchase_date = models.DateField()
    purchase_place = models.CharField(verbose_name='Place of Purchase', max_length=255)
    purchaseCategory = models.ForeignKey(PurchaseCategory, verbose_name='Purchase Category')
    cost = models.DecimalField(max_digits=11, decimal_places=2)
    warranty_period_number = models.IntegerField()
    warranty_period_type = models.CharField(max_length=255, choices=(('m', 'Month(s)'), ('y', 'Year(s)')))
    warranty_end_date = models.DateField(editable=False)
    scan = models.CharField(max_length=255)
    alerts = models.BooleanField(verbose_name='Receive Email Alerts?')
    user = models.ForeignKey('auth.User', editable=False)
    created = models.DateTimeField(editable=False, auto_now_add=True)
    modified = models.DateTimeField(editable=False, auto_now=True)

    #custom save model
    def save(self, *args, **kwargs):
        #figure out warranty end date
        if self.warranty_period_type == 'm':
            self.warranty_end_date = self.purchase_date + self.purchase_date.timedelta(months=self.warranty_period_number)
        else:
            self.warranty_end_date = self.purchase_date + self.purchase_date.timedelta(years=self.warranty_period_number)
        super(Purchase, self).save()

我认为下面的方法会起作用,但运气不好..它的错误是:

'datetime.date' object has no attribute 'timedelta'

任何人都可以指出正确的方向来做我想做的事吗?

干杯, 本

最佳答案

timedelta不接受年份,所以

from datetime import timedelta
# custom save model
def save(self, *args, **kwargs):
    # figure out warranty end date
    if self.warranty_period_type == 'm':
        self.warranty_end_date = self.purchase_date + timedelta(days=self.warranty_period_number*31)
    else:
        self.warranty_end_date = self.purchase_date + timedelta(days=self.warranty_period_number*365.2425)
    super(Purchase, self).save(*args, **kwargs)

引用文献 Python timedelta in years

关于python - Django 自定义保存模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9953427/

相关文章:

django - 如何在保存时将整数添加到 Django 模型中的主键字段

python - 类型错误 : __init__() missing 1 required positional argument: 'get_response'

python - Django 循环导入和模型问题

python - 将生成的 PIL 图像保存到 django 中的 ImageField 中

javascript - 如何将 json 键解析为 json 对象

python - 保存没有背景opencv的图像

python - 为什么我会收到 TypeError : unsupported operand type(s) for +

python - 如何在不直接命名的情况下从其中访问函数

python - Golang - 检测 JSON 输入中的重复键

django - 检查条件时避免在 django 模板中进行额外的 SQL 调用