direwolf
@direwolf
Начинающий веб-разработчик

Как можно сделать фильтр объектов при использовании select_related()?

У меня есть классы Категория и Статья. Мне нужно вывести ОПУБЛИКОВАННЫЕ статьи при выборке их по категориям.

Код из views.py:

class CategoryDetailView(DetailView):
    model = Category

    def get_context_data(self, **kwargs):
        context = super(CategoryDetailView, self).get_context_data(**kwargs)
        context['article_list'] = Article.objects.select_related()
        return context


И в шаблоне:

{% for article in object.article_set.all %}
        {{ article.title }}
        {{ article.author }}
        {{ article.published }}
{% endfor %}


выводятся все статьи по категориям, а мне надо только ОПУБЛИКОВАННЫЕ.

При использовании
context['article_list'] = Article.objects.select_related().filter(status=1)
ничего не происходит, к сожалению.

Пожалуйста, есть идеи?
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 1
bergsoft
@bergsoft
Web development using the framework Django/Python
в этом месте
{% for article in object.article_set.all %}
вы не обращаетесь к переменной article_list , вы просто перебираете все статьи которые есть в категории.

Сделайте свой менеджер для статей например так
class ArticleManager(models.Manager):
    def all_published(self):
        return self.get_queryset().filter(status=1)


в модели Article соответственно добавьте
objects = ArticleManager()

и тогда уж в шаблоне можно вот так вызвать
{% for article in object.article_set.all_published %}


ну и убрать вовсе переопределение def get_context_data(self, **kwargs): можна в таком случае :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы