Как добавить результат функции из модели в список?
Как добавить результат функции из модели в подраздел списка()'
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')
)