Django:如何将 2 天添加到用户输入的现有日期
Posted
技术标签:
【中文标题】Django:如何将 2 天添加到用户输入的现有日期【英文标题】:Django: How to add 2 days to an existing date entered by user 【发布时间】: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:预期的字符串或类似字节的对象
【问题讨论】:
【参考方案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 没有给出任何错误。将检查代码以上是关于Django:如何将 2 天添加到用户输入的现有日期的主要内容,如果未能解决你的问题,请参考以下文章
我的 django 模型 DateField 如何将 30 天添加到提供的值?
持续向好,全国连续6天治愈病例超千人 | 2月18日疫情播报