Django自定义保存模型 [英] Django Custom Save Model

查看:124
本文介绍了Django自定义保存模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在django中的保存模式中执行基本日期计算,见下面的代码:

I'm trying to perform a basic date calculation in a save model in django, see below code:

  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()

我以为以下的工作,但没有运气..它的错误:

I thought the following would work but no luck.. it errors with:

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

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

Can anyone point in the right direction to do what I'm trying to do?

干杯,

推荐答案

timedelta不接受年数,所以

timedelta doesnot accept years, so

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

这篇关于Django自定义保存模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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