<p>A有PostgresQL和django 1.7的脏解决方案:</p>
<pre><code>from django.db.models import query
DATE_COMPARE_TEMPLATE = '("{0}" AT TIME ZONE \'{1}\')::date {2} \'{3}\'::date'
def offset_to_string(timezone_offset_m):
return '{sign}{hours}:{minutes}'.format(**{
# note invesred signs: '-' for positive, '+' for negative
# Postgres uses this notation to calculate offset
'sign': '-' if timezone_offset_m > 0 else '+',
'hours': '{:0>2}'.format(abs(int(timezone_offset_m)) // 60),
'minutes': '{:0>2}'.format(abs(int(timezone_offset_m)) % 60),
})
class PeriodQuerySet(query.QuerySet):
def filter_date(self, field, compare, value, timezone_offset_m=0):
timezone = offset_to_string(timezone_offset_m)
query = DATE_COMPARE_TEMPLATE.format(field,
timezone,
compare,
value.isoformat())
qs = self.extra(where=[query])
return qs
</code></pre>
<p>和用法(对于附加了queryset的模型):</p>
^{pr2}$
<p>如果查询包含两个表,而这两个表都有“start\u time”列,则可能会出现名称冲突。在</p>