我正在寻找一种在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'
)
)
请告知解决此问题的正确方法。
答案 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_date
与my_time_field
中的时间合并,然后将其输出为DateTimeField
。
答案 1 :(得分:0)
这是一个简单的解决方案,但需要一段时间让我弄明白。如果其他人有同样的问题,这就是答案。只需使用ExpressionWrapper
。
objects = MyModel.objects.annotate(
custom_datetime=ExpressionWrapper(
custom_date + F('my_time_field'),
output_field=DateTimeField()
)
)