как создать запрос для перечисления категорий в django - PullRequest
1 голос
/ 08 мая 2020

Я получил это в моем view.py и хочу перечислить все категории

def home(request):

    category = Category.objects.all()

    context = {

        'category': category,
    }

    return render(request, 'courses/index.html', context)

model.py

class Category(models.Model):
    title = models.CharField(max_length=30, null=True)
    slug = models.SlugField(max_length=30, unique=True)


class Course(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    name = models.CharField(max_length=30)
    slug = models.SlugField(max_length=30, unique=True)

, но я получаю этот вывод из печати:

<QuerySet [<Category: Courses>, <Category: Computers>]>

может кто мне с этим поможет

1 Ответ

1 голос
/ 08 мая 2020

category является не отдельной категорией. Но для набора категорий вам нужно итерировать по нему, например:

def home(request):
    categories = Category.objects.all()
    context = {
        'categories': categories,
    }
    return render(request, 'courses/index.html', context)

В шаблоне вы повторяете и можете отобразить это с помощью:

{% for <b>category in categories</b> %}
    {{ category }}
{% endfor %}

EDIT : вы можете аннотировать свой набор запросов количеством связанных Course объектов:

from django.db.models import <b>Count</b>

def home(request):
    categories = Category.objects.annotate(
        <b>num_courses=Count('course')</b>
    )
    context = {
        'categories': categories,
    }
    return render(request, 'courses/index.html', context)

Затем вы можете визуализировать это с помощью:

{% for <b>category in categories</b> %}
    {{ category }}: {{ category.num_courses }}
{% endfor %}
...