Как привести django.db.models F к строке?

Примечание: работа над дорогим корпоративным унаследованным кодом и моделями, которые запрещено изменять

Что я пытаюсь сделать:

  • Объедините два поля в одно в виде поля DateTime.

Model.py:

from django.db import models

class DateThing(models.Model):
    date = models.DateField()
    start_time = models.CharField("Start time", max_length=255)

Viewset.py

from datetime import datetime
from django.db.models import F
from django.db.models.functions import Concat
from rest_framework import mixins, viewsets

class ViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
    date_things = DateThing.objects.annotate(
        start=Concat(
            F("date"),
            Value(" "),
            datetime.strftime(
                datetime.strptime(str(F("start_time")), "%I:%M %p"),
                "%H:%M",
            ),
            Value("+00:00"),
            output_field=CharField(),
        )
    )

    ...

Желаемый результат:

2022-11-01 20:30:00+00:00

Узнал об этом от кого-то из команды

class ViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
    queryset_shifts = DateThing.objects.annotate(
        s_time=Cast("start_time", output_field=TimeField()),
        start=Concat(
            F("date"),
            Value(" "),
            F("s_time"),
            Value("+00:00"),
            output_field=CharField(),
        ),
    ).exclude(start_time="")
Вернуться на верх