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 %}
Вернуться на верх