因为你在使用
MYSQL 5.6
,你可以使用MySQL
TIMESTAMPDIFF(...)
功能。
我的建议是,通过继承
django.db.models.expressions.Func
类为,
class Format(dict):
def __missing__(self, key):
return '%(' + key + ')s'
class TIMESTAMPDIFF(Func):
def __init__(self, start, end, unit='days'):
extra = {}
expressions = [start, end]
extra['output_field'] = IntegerField()
self.template = self.template % Format({"unit": unit})
super().__init__(*expressions, **extra)
function = 'TIMESTAMPDIFF'
template = "%(function)s(%(unit)s, %(expressions)s)"
因此,annotation查询将为,
event_queryset = Event.objects.annotate(days=TIMESTAMPDIFF(F('start'), F('end'), unit='DAY' ))
参考文献
:
How to implement TIMESTAMPDIFF() of MYSQL in Django