Django 查询集在过滤时不会更新



遵循本教程(从07 '05开始),我试图实现一个基于facet过滤器的导航。

下面是我的代码:

models.py

class ObjetArchi(models.Model):
id = models.AutoField(
primary_key=True,
)  
materiau = models.ForeignKey(
'Materiau',
on_delete=models.SET_NULL,
related_name='objets_archi',
blank=True,
null=True
)
class Materiau(models.Model);
id = models.AutoField(
primary_key=True
)
nom = models.CharField(
max_length=125,
blank=True,
null=True
)     

views.py

class NoticesListView(ListView):
model = ObjetArchi
template_name = 'notices/index.html'
context_object_name = 'liste_notices'
paginate_by = 20
def get_queryset(self):
qs = super().get_queryset()
materiau = self.request.GET.get('materiau__nom')
if materiau:
qs = qs.filter(type=materiau)
return qs
def get_context_data(self, **kws):
context = super().get_context_data(**kws)
context['materiaux'] = (
self.get_queryset()
.values('materiau__nom')
.annotate(count=Count('id'))
)
return context

urls . py

urlpatterns = [
path('', views.NoticesListView.as_view(), name='notices_list'),
]

通知/index . html

{% for materiau in materiaux %}
<ul>
<a href="?materiau={{ materiau.materiau__nom }}">
{{ materiau.materiau__nom }} ({{ materiau.count }})
</ul>
{% endfor %}
{% if liste_notices %}
<ul>
{% for notice in liste_notices %}
<li><a href="{% url 'notices:detail' notice.id %}">{{ notice.titre }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>Aucune notice n'est accessible.</p>
{% endif %}

facet显示预期的materiau__nom和count,但是当我单击过滤器类别时,查询集不更新。代码中有任何可见的错误吗?

问题是这样解决的:

view.py

def get_queryset(self):
qs = super().get_queryset()
materiau = self.request.GET.get('materiau')
if materiau:
qs = qs.filter(materiau__nom=materiau)
return qs

index . html

{% for materiau in materiaux %}
<ul>
<a href="?materiau={{ materiau.materiau__nom }}">
{{ materiau.materiau__nom }} ({{ materiau.count }})
</ul>
{% endfor %}

最新更新