Django:从某个日期开始获取月份

时间:2019-04-18 06:57:16

标签: python django django-models time

我试图获取自创建模型以来的月数。

我的模型如下:

class Plan(models.Model):
    title = models.CharField(max_length=50)
    date_created = models.DateTimeField(default=timezone.now)
    plan_type = models.IntegerField()
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

现在,我想创建一个返回自创建日期以来的月数的方法。
坦克的任何帮助:D

2 个答案:

答案 0 :(得分:1)

比较日期会创建一个datetime.timedelta对象,您可以使用该对象来获取日期之间的差额。

from datetime import timedelta
from django.utils.timezone import now    


delta: timedelta = now() - plan.date_created
delta.days  # Number of days between dates.

然后您可以使用该值将其转换为月或年。

另一种选择会有些复杂,但是由于DateTimeField返回一个datetime.datetime对象,因此您还可以访问原始日期的月份号并将其与今天的日期进行比较。

例如

from django.utils.timezone import now

month_diff = now().month - plan.date_created.month

第二种方法的问题是,您必须考虑是否是同一年,如果不是同一年,则必须在考虑月份差异时考虑这一点。

答案 1 :(得分:0)

您可以在模型中编写属性,例如

from django.utils import timezone
class Plan(models.Model):
    title = models.CharField(max_length=50)
    ...

    @property
    def get_month(self):
        return self.date_created.month - timezone.now().month

然后您可以获取像这样的值

>>> Plan.objects.first().get_month
4