【问题标题】:Comparing dates in Django does not work在 Django 中比较日期不起作用
【发布时间】:2018-05-18 19:31:10
【问题描述】:

我在 Django 中比较日期时遇到问题。我按照提示How to compare dates in Django 但它不起作用。也许你能帮帮我。

我的代码:

modelys.py

class Customer(models.Model):
last_updated = models.DateTimeField(auto_now_add=True)

views.py

@property
def is_past_due(self):
return (date.today() - self.date)> timedelta(1)

home.html

{% if customer.last_updated.is_past_due %}
<td class="table-danger">{{ customer.last_updated }}</td>
{% else %}
<td class="align-middle">{{ customer.last_updated }}</td>
{% endif %}

我正在使用 Bootstrap,所以当两个日期之间的差异超过一天时,我希望一个表格字段变得“危险”-ous ;-),但没有任何变化。

提前致谢。

PS:将def timdedelta中的错字编辑为timedelta。

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    您可以使用 datetime 的 days 属性来获取日期之间的确切间隔。

    (datetime.today()- self.last_updated).days > 1 其中 self.last_updated 是“客户”模型的字段名称

    【讨论】:

    • 感谢您的回答。如果您想获得可以直接比较的数字,这基本上就是这种方式,而没有“.days”则必须使用 timedelta。但不幸的是,这并不能解决我的问题。 :-(
    • 您希望您的函数返回“True”或“False”。在这里,条件 > 1 将为您执行此操作。如果我对您的问题的理解不正确,请告诉我。谢谢。
    • 我的目标是在模板中有 if 子句。我有两个条件。 1.) 当 today-last_updated 日期的差异大于 1 时,我希望第一个条件完成 2.) 否则。但据我所知,“is_past_due”没有被正确调用。即使我写 return True 它也不会改变。我仍然认为我是新手,不知道一些基础知识。
    • @kingbrain,让属性方法成为模型类的一部分,并在模板中直接使用它。即 {% if customer.is_past_due %}
    【解决方案2】:

    这里是帖子总结的最终代码:

    models.py

    from datetime import datetime
    
    class Customer(models.Model):
    last_updated = models.DateTimeField(auto_now_add=True)
    #...some more code...
        @property
        def is_past_due(self):
            return (datetime.now(timezone.utc) - self.last_updated).days>1
    

    home.html

    {% if customer.is_past_due %}
    <td class="align-middle table-danger">{{ customer.last_updated.date}}</td>
    {% else %}
    <td class="align-middle">{{ customer.last_updated}}</td>
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多