У меня есть общий ListView, где я получаю некоторые общие вещи (это не связано с моим вопросом).Django: как фильтровать модель с отношениями ManyToMany
У меня модель Product
, которая имеет отношение ManyToMany с Tag
т.е. Product
может иметь много Tag
Tag
и может быть связан со многими Product
.
В этом общем списке ListView я хочу отфильтровать все Tag
, у которых есть фактически Product
, чтобы клиент мог нажать на Tag
, и я мог бы фильтровать позже.
До сих пор я пришел к этому:
class IndexView(generic.ListView):
template_name = 'produits/index.html'
context_object_name = 'liste_produits'
def get_queryset(self):
"""Return the last five created products."""
return Produit.objects.order_by('-date_v_fin', '-date_v_debut')[:5]
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['produits_tags'] = list(
Tag.objects.values_list('nom', flat=True)
)
context['produits_tags'].insert(0, _("Tous"))
return context
Но Tag.objects.values_list('nom', flat=True)
возвращает все Tag
, в том числе тех, у кого нет Product
. Как отфильтровать это?
Я не совсем понимаю, что вам нужно. Вы просто хотите показать все теги, у которых есть продукт, или вы хотите перебирать продукты и показывать теги для каждого из них? –
@ DanielRoseman Я хочу показать все теги, которые имеют продукт –