class ExtractSecond(Extract): lookup_name = 'second' DateField.register_lookup(ExtractYear) DateField.register_lookup(ExtractMonth) DateField.register_lookup(ExtractDay) DateField.register_lookup(ExtractWeekDay) DateField.register_lookup(ExtractWeek) TimeField.register_lookup(ExtractHour) TimeField.register_lookup(ExtractMinute) TimeField.register_lookup(ExtractSecond) DateTimeField.register_lookup(ExtractHour) DateTimeField.register_lookup(ExtractMinute) DateTimeField.register_lookup(ExtractSecond) ExtractYear.register_lookup(YearExact) ExtractYear.register_lookup(YearGt) ExtractYear.register_lookup(YearGte) ExtractYear.register_lookup(YearLt) ExtractYear.register_lookup(YearLte) class TruncBase(TimezoneMixin, Transform): arity = 1 kind = None tzinfo = None
class ExtractSecond(Extract): lookup_name = 'second' DateField.register_lookup(ExtractYear) DateField.register_lookup(ExtractMonth) DateField.register_lookup(ExtractDay) DateField.register_lookup(ExtractWeekDay) TimeField.register_lookup(ExtractHour) TimeField.register_lookup(ExtractMinute) TimeField.register_lookup(ExtractSecond) DateTimeField.register_lookup(ExtractYear) DateTimeField.register_lookup(ExtractMonth) DateTimeField.register_lookup(ExtractDay) DateTimeField.register_lookup(ExtractWeekDay) DateTimeField.register_lookup(ExtractHour) DateTimeField.register_lookup(ExtractMinute) DateTimeField.register_lookup(ExtractSecond) ExtractYear.register_lookup(YearExact) ExtractYear.register_lookup(YearGt) ExtractYear.register_lookup(YearGte) ExtractYear.register_lookup(YearLt) ExtractYear.register_lookup(YearLte) class TruncBase(TimezoneMixin, Transform):
from django.db.models import Transform from django.db.models import DateTimeField, TimeField from django.utils.functional import cached_property class TimeValue(Transform): lookup_name = 'time' function = 'time' def as_sql(self, compiler, connection): lhs, params = compiler.compile(self.lhs) return 'TIME({})'.format(lhs), params @cached_property def output_field(self): return TimeField() DateTimeField.register_lookup(TimeValue)
from django.db.models import Transform, DateTimeField, IntegerField class DateTimeLocal(Transform): lookup_name = 'local' def as_sql(self, compiler, connection): lhs, params = compiler.compile(self.lhs) dt = lhs # has quotes like "table_name"."date_time" tz = lhs[:-1] + "_tz" + lhs[-1] # Add _tz to field name return f"{dt} AT TIME ZONE {tz}", params DateTimeField.register_lookup(DateTimeLocal) class MonthWeek(Transform): lookup_name = 'month_week' @property def output_field(self): return IntegerField() def as_sql(self, compiler, connection): lhs, params = compiler.compile(self.lhs) return f"TO_CHAR( {lhs}, 'W' )::integer", params DateTimeField.register_lookup(MonthWeek)
@property def output_field(self): return DateField() class StartClassDate(Transform): lookup_name = 'datestart' @property def output_field(self): return DateField() DateField.register_lookup(AddDate) DateTimeField.register_lookup(AddDate) DateField.register_lookup(DateDiff) DateTimeField.register_lookup(DateDiff) DateField.register_lookup(DayYear) DateTimeField.register_lookup(DayYear) DateField.register_lookup(NumDay) DateTimeField.register_lookup(NumDay) SmallIntegerField.register_lookup(DateFromNum) PositiveIntegerField.register_lookup(DateFromNum) IntegerField.register_lookup(DateFromNum) # AddDate, DateDiff, DayYear, NumDay, DateFromNum, MakeDate, DateToday # Find the difference between two dates, may span over some years. # Create a new date by adding or subtracting an integer of days. date1: datetime, num: integer -> datetime # Determine if a date is before or after another date.