functions.py 812 B

1234567891011121314151617181920212223242526
  1. from django.db.models import DecimalField, DurationField, Func
  2. class IntervalToSeconds(Func):
  3. function = ""
  4. template = """
  5. EXTRACT(day from %(expressions)s) * 86400 +
  6. EXTRACT(hour from %(expressions)s) * 3600 +
  7. EXTRACT(minute from %(expressions)s) * 60 +
  8. EXTRACT(second from %(expressions)s)
  9. """
  10. def __init__(self, expression, *, output_field=None, **extra):
  11. super().__init__(
  12. expression, output_field=output_field or DecimalField(), **extra
  13. )
  14. class SecondsToInterval(Func):
  15. function = "NUMTODSINTERVAL"
  16. template = "%(function)s(%(expressions)s, 'SECOND')"
  17. def __init__(self, expression, *, output_field=None, **extra):
  18. super().__init__(
  19. expression, output_field=output_field or DurationField(), **extra
  20. )