модель с несколькими запросами в одном представлении django - PullRequest
0 голосов
/ 25 марта 2020

В последние недели я делал django, и у меня возникла проблема.

У меня есть страница, где показываются статьи. Нет проблем при возврате всех статей из БД. Но теперь я хотел бы получить все категории (статья имеет категорию), которые у меня есть в моей базе данных.

Так что я могу отображать это на своей странице:

Список категорий - cat1 -cat2 -cat3

Список статей -art1 -art2 -art3

Но я не знаю, как поступить с обоими запросами.

Вот что я пробовал.

class IndexView(generic.ListView):
    template_name = 'eduardoApp/index.html'
    context_object_name = 'article_list'

    def get_queryset(self):
        return Article.objects.order_by('article_name')

    def get_categories(request):
        category_list=Category.objects.all()
        context = {'category_list':category_list}
        return render(request,'eduardoApp/index.html',context)

И на мой взгляд:

<h2>List of categories</h2>
{% if category_list %}
    {% for category in category_list %}
        <p>{{ category.name }}</p>
    {% endfor %}
{% else %}
<p>no categorys</p>
{% endif %}

<h2>List of articles</h2>
{% if article_list %} 
    <div class="flex-container">
        {% for article in article_list %}
            <div><a href="{% url 'eduardoApp:detail' article.id %}">{{ article.article_name }}</a></div>
        {% endfor %}
    </div>
{% else %}
    <p>No articles...</p>
{% endif %}
{% endblock %}

На мой взгляд, я не вижу отображаемых категорий (так как category_list не существует, но не знаю, почему и как исправить )

1 Ответ

1 голос
/ 25 марта 2020

ListView создает контекст с «объектами», как возвращается набор запросов get_queryset. Я полагаю, ваш пользовательский метод get_categories нигде не использовался?

Лучшая практика здесь - переопределить get_context_data метод, подобный ...

class IndexView(generic.ListView):
    ...
    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['category_list'] = ...
        return context

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...