如何创建查询以列出 Django 中的类别

how to create query to list categories in django

我在我的 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>]>

谁能帮我解决这个问题

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 %}

编辑:您可以使用 相关 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 %}