如何在Django中组合自定义日期和时间字段?

时间:2018-03-25 11:29:19

标签: python django orm

我正在寻找一种在django中组合自定义日期值和时间字段的方法。我的模型只包含一个时间字段。现在我必须注释一个结合了自定义日期和时间字段的新字段。我认为以下代码将解决我的问题,但它只提供日期值。 TimeField被忽略。

class MyModel(models.Model):
   my_time_field = TimeField()

custom_date = datetime.today().date()
objects = MyModel.objects.annotate(
    custom_datetime=Func(
        custom_date + F('my_time_field'),
        function='DATE'
    )
)

请告知解决此问题的正确方法。

2 个答案:

答案 0 :(得分:0)

您应该能够以类似于此的方式使用Value表达式(请参阅the docs):

class MyModel(models.Model):
    my_time_field = TimeField()

custom_date = datetime.today().date()
MyModel.objects.annotate(
    custom_datetime=Value(
        datetime.datetime.combine(custom_date, F('my_time_field')),
        output_field=DateTimeField()))

关键部分是将custom_datemy_time_field中的时间合并,然后将其输出为DateTimeField

答案 1 :(得分:0)

这是一个简单的解决方案,但需要一段时间让我弄明白。如果其他人有同样的问题,这就是答案。只需使用ExpressionWrapper

objects = MyModel.objects.annotate(
    custom_datetime=ExpressionWrapper(
        custom_date + F('my_time_field'),
        output_field=DateTimeField()
    )
)