Django regroup tag get fields values
У меня есть веб-страница, на которой есть две модели для товаров и категорий. У меня есть navbar, где вы можете фильтровать Productos
по категориям, поэтому, чтобы сделать его динамическим, я передал категории в navbar, а затем применил перегруппировку, поскольку я получаю категории из модели Products
, так как именно ее использует страница для отображения продуктов.
Когда я пытаюсь отфильтровать значение из регруппы и передать его в представление:
class Categoria_Filter(ListView):
model = Productos
paginate_by = 10
template_name = 'mail/category-filter.html'
def get_queryset(self):
categoria = self.kwargs['slug']
print(categoria)
if categoria == 'Todos':
return Productos.objects.all()
else:
return Productos.objects.filter(categoria = categoria)
При печати я получаю следующий результат:
GroupedResult(grouper=<Categorias: Guantes de Box>, list=[<Productos: Guantes Básico ADX>])
, что согласно документации является namedtuple()
Я пробовал следующее:
print(getattr(categoria, 'GroupedResult'))
print(getattr(categoria, 'grouper'))
print(getattr(categoria, 'Categorias'))
Все они дают мне:
AttributeError: 'str' object has no attribute 'whatever field I have tried'
Также, я печатаю по индексу и, например:
print(categoria[1])
дает мне
r
Я знаю, что r
из GroupedResult
и что я хочу получить из namedtuple это Guantes de Box
не:
GroupedResult(grouper=<Categorias: Guantes de Box>, list=[<Productos: Guantes Básico ADX>])
это перегруппировка в шаблоне
{% regroup object_list by categoria as categoria_list %}
{% for item in categoria_list%}
<li class="nav-item">
<a class="nav-link text-white" href="{% url 'categoria-filter' item %}">{{ item.grouper }}</a>
</li>
{% endfor %}
Основываясь на следующей строке, которую вы имеете в get_queryset()
вашем представлении, основанном на классе:
categoria = self.kwargs['slug']
categoria
- это значение ключа 'slug'
в запросе и, конечно, это экземпляр типа данных str
в языке программирования python.
Но на основании того, что я могу выяснить из вашего вопроса, вам нужно Guantes de Box
и с помощью приведенного ниже кода и в {{ x.grouper }}
, вы можете увидеть фразу Guantes de Box
.
{% regroup object by object.property as newname %}
{% for x in newname %}
{{ x.grouper }} --> this expression gives you the grouper names
{% for y in x.list %}
<p>{{ y.blobfield }}: {{ y.blobblobfield }}</p>
{% endfor %}
{% endfor %}