【问题标题】:Django: How to add 2 days to an existing date entered by userDjango:如何将 2 天添加到用户输入的现有日期
【发布时间】:2019-07-06 13:08:30
【问题描述】:

我正在尝试在活动后 2 天添加一个付款到期日

class Payment(models.Model):       
    event_date = models.DateField()        
    payment_due_date = models.DateField()    


    class Meta:
        ordering = ["payment_due_date"]

    def payment_due_date(self):
         event_date = self.event_date
         return event_date + datetime.timedelta(days=2)

Pycharm 给我一个错误提示 Expected type 'timedelta', got 'DateField' instead more... (Ctrl+F1)

我该如何解决这个问题

终端错误

match = date_re.match(值) TypeError:预期的字符串或类似字节的对象

【问题讨论】:

    标签: django python-3.x django-models django-views


    【解决方案1】:

    您可以在模型中覆盖 save() 方法。

    注意,Django 中的DateTimeField 变成了datetime.datetime 对象。因此,要从中检索日期,您需要调用field.date()

    例子:

    models.py

    from django.db import models
    import datetime
    
    class Payment(models.Model):
        event_date = models.DateField()
        payment_due_date = models.DateField()
    
        class Meta:
            ordering = ["payment_due_date"]
    
        def save(self, *args, **kwargs):
            if self.payment_due_date is None:
                self.payment_due_date = self.event_date.date() + datetime.timedelta(days=2)
            super(Payment, self).save(*args, **kwargs)
    

    【讨论】:

    • Expected type 'timedelta', got 'DateField' instead more... (Ctrl+F1) 在 pycharm 中出现此错误
    • @MarcoBianchi 只是好奇...如果您尝试使用datetime.timedelta(hours=48) 而不是days 会怎样。你得到同样的错误吗?
    • 我的意思是这段代码适用于datetime.today() + datetime.timedelta(days=2) 之类的东西,如果我添加一个 django 字段,它会给出上述错误
    • @MarcoBianchi 我认为您可能需要在现场调用date() 方法。请参阅上面的更新代码。
    • 我认为它做到了。 Pycharm 没有给出任何错误。将检查代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2023-03-06
    • 2011-01-20
    相关资源
    最近更新 更多