Как добавить результат функции из модели в список?

Как добавить результат функции из модели в подраздел списка()'

models.py

class Hromady(models.Model): ...

    def subdom(self):
        if self.alias:
            sub = self.alias
        else:
            sub = self.code.lower()
        return sub

views.py

def index(request):
    hromads = Hromady.objects.all()
    for hr in hromads:
        print(hr.subdom()) # ok

    hrom = hromads.annotate(obj_count=Count('object', filter=Q(object__state=1)))
    map_hrom = list(hrom.values('region', 'district', 'locality', 'type', *****subdom()*****???, 'obj_count'))

Вы не можете ссылаться на методы своих моделей в .values. Но вы можете написать аналогичное выражение, используя другое .annotate, а затем сослаться на него в .values. Это выглядело бы примерно так:

from django.db.models import (
    Case,
    Count,
    F,
    Q,
    When,
    functions,
)

queryset = (
    Hromady.objects
    .annotate(obj_count=Count('object', filter=Q(object__state=1)))
    .annotate(
        subdom=Case(
            When(~Q(alias=''), then=F('alias')),
            default=functions.Lower(F('code'))
        )
    )
    .values('region', 'district', 'locality', 'type', 'subdom', 'obj_count')
)
Вернуться на верх