【问题标题】:Django DateField subtractionDjango DateField 减法
【发布时间】:2012-11-27 05:49:44
【问题描述】:

我正在尝试这个:

retVal= ""
dI = models.DateField(date(year=2005, month=11, day=1))
dF = models.DateField(date(year=2005, month=11, day=6))

diff = dF - dI

retVal += diff + "message"

但是我收到了这个错误

不支持的操作数类型 -: 'DateField' 和 'DateField'

你能帮帮我吗?

【问题讨论】:

  • 您不能减去两个日期字段。您只能减去其中的值。

标签: django django-models datefield


【解决方案1】:

你正在做一些非常奇怪的事情。您有 django 模型代码,它定义了不包含任何值的 Field 对象。只有实例包含字段值(您在类级别定义事物)所以无论您做什么都应该放在类方法中。

也许你很困惑,因为 django 的元类魔法将对这些属性的引用转换为数据库中的 python 值?

class MyModel(models.Model):
    foo = models.DateField()

    print foo  # is a models.DateField

    def get_foo_after_django_magic(self):
        print self.foo  # is a datetime() instance

【讨论】:

    【解决方案2】:

    DateFields 与 python 日期时间实例不同,因此您无法执行您正在尝试执行的操作,因为 DateFields 不允许该操作。 Raunak 提供的答案是正确的。

    如果您有一个模型,其中包含 DateField 作为属性,那么您将执行类似的操作。

    my_object = MyModelWithDateField.object.get(pk=1)
    diff = datetime.today - my_object.some_datefield
    

    【讨论】:

      【解决方案3】:

      您可以减去 Datefiedl 的值,即

      df = datetime.date(year=2005, month=11, day=1)
      di = datetime.date(year=2005, month=11, day=6)
      

      您不能直接对日期字段执行操作

      当您尝试减去两个日期对象时,差异会返回一个 timedelta 实例

      >>> df = datetime.date(year=2005, month=11, day=1)
      >>> di = datetime.date(year=2005, month=11, day=6)
      >>> di -d5
      datetime.timedelta(5)
      

      【讨论】:

        猜你喜欢
        • 2012-06-13
        • 2019-06-11
        • 2020-01-13
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        相关资源
        最近更新 更多