Найти - Пользователи
Полная версия: группировка в шаблоне по двум полям
Начало » Django » группировка в шаблоне по двум полям
1
django2014
В шаблоне выполняю группировку с помощью regroup. Но, перегруппировака нужна по двум полям, например f1 и f2. Чтобы выполнить ее, пришлось в модель добавить поле f12, которое заполняется методом save, вот так:
class MyModel(Model):
    f1 = ...
    f2 = ...
   def save(self, *args, **kwargs):
       f12 = f1 + f2
       ...

Уважаемые форумчане, является ли такое решение нормальным? Может есть какие-то трюки, к-е я проглядел в интернете или документации.

Спасибо!
FishHook
Если стандартный тег не удовлетворяет потребностям - пишите свой. Вот это нормальное решение, ИМХО.
svas
Добавьте просто property в модель
django2014
svas
Добавьте просто property в модель

пробовал и отказался по следующей причине. При выполнении выборки из БД и указании полей в objects.filter(…).values('f12', … ) свойство не воспринимается как поле модели и наблюдается ошибка
Cannot resolve keyword 'f12' into field
Т.е. при генерации выборки, я так понимаю, требуется настоящее поле в таблице БД.

Свойство оформил так:
def _get_f12(self):
        return '%s %s'' % (self.f1, self.f2)
f12 = property(_get_f12) 
svas
Дак не надо objects.filter(…).values('f12', …). Если без values, у вас создадутся экземпляры модели, у которых будет f12. Или нужно использовать именно values?
django2014
svas
Дак не надо objects.filter(…).values('f12', …). Если без values, у вас создадутся экземпляры модели, у которых будет f12. Или нужно использовать именно values?

я с помощью values и “__” добираюсь до полей из другой таблицы.

Записи f1, f2 делает конкретный пользователь и БД хранит id пользователя из стандартной таблицы auth_user. Имеется связь между auth_user и profile и нужно излечь данные принадлежащие пользователю из profile: c value получается просто, например, userid__profile__middle_name. По другому как это сделать - не знаю.
svas
Без values
User.objects.filter(..).\
 prefetch_related('profile').\ # Выбрать сразу и профили, у вас возможно по-другому называется
 only(...) # Если не нужно выбирать все данные
Ну и потом использовать f1, f2, f12
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB