[英]Math Operations on DateField Django
当有人输入时,日期和时间将按预期记录。 我很好奇的是如何在那个日期进行数学运算。 就像我想显示对象的创建日期,以及未来 2 周的日期。
模型.py
from django.db import models
class Checkout(models.Model):
member_id = models.IntegerField(null = True)
title = models.CharField(max_length = 1000)
date_checkout = models.DateField(auto_now = True)
# expected_return = date_checkout * 2
我以为我在网上偶然发现了一个有用的资源,其中提到了一些关于此的内容,但我再也找不到了。 如果你能给我指出一些在线资源,那就太棒了。
您可以提供一个可调用作为默认值,然后存储该结果(假设您实际上想要存储 expected_return (即用于查询))
class Checkout(models.Model):
member_id = models.IntegerField(null = True)
title = models.CharField(max_length = 1000)
date_checkout = models.DateField(auto_now = True)
expected_return = models.DateField(default=lambda:datetime.datetime.now()+datetime.timedelta(days=14))
Checkout.objects.filter(expeded_return__lt=datetime.datetime.now())
checked_out_item.expected_return
如果你希望它是一个实际的字段(即可以查询Checkout.objects.filter(expeded_return__lt=datetime.datetime.now())
如果您只是想要一种简单的访问方式,那么类上的属性可以使函数看起来像属性
class Checkout(models.Model):
member_id = models.IntegerField(null = True)
title = models.CharField(max_length = 1000)
date_checkout = models.DateField(auto_now = True)
@property
def expected_return(self):
return self.date_checkout + datetime.timedelta(days=14)
print(checked_out.expected_return)
如果您选择第二个选项,则需要确保仅在设置结帐日期后使用它
from demo_app.models import Checkout
c = Checkout(member_id=1,title="asd")
c.expected_return # since there is no date_checkout we get error
Traceback (most recent call last):
File "C:\Users\joran\AppData\Local\Programs\Python\Python37-32\lib\site-packages\IPython\core\interactiveshell.py", line 3296, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-4-4687ba4c4a16>", line 1, in <module>
c.expected_return # since there is no date_checkout we get error
File "D:\demo_django\demo_app\models.py", line 11, in expected_return
return self.date_checkout + datetime.timedelta(days=14)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'datetime.timedelta'
c.save()
c.expected_return # since there is now a checkout it works
Out[6]: datetime.date(2019, 12, 14)
import datetime
c = Checkout(member_id=1,title="asd",date_checkout=datetime.datetime.now())
c.expected_return # since we set the date_checkout it will work even though its not saved
Out[10]: datetime.datetime(2019, 12, 14, 13, 36, 21, 270897)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.