如何在 Django 中使用 listview 过滤类别和子类别

问题描述 投票:0回答:1

我在 Django 中有类别和子类别模型,我需要在“class SubCategoriesListView”中获取类别模型的后代

`models.py
class Category(models.Model):
    name = models.CharField('Категория', max_length=150, default='name')
    url = models.SlugField(max_length=160, unique=True)


class SubCategory(models.Model):
    name = models.CharField('SubCategory', max_length=150, default=True)
    url = models.SlugField(max_length=160, unique=True)
    image = models.ImageField('Pic', upload_to='img', null=True, blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

如何过滤与类别模型关联的子类别? (稍后我必须使用detailview,所以解决方案必须使用ListView模型)

`views.py

class CategoriesListView(ListView):
    model = Category
    queryset = Category.objects.all()
    template_name = 'catalog/category_list.html'
    context_object_name = 'category_list'

class SubCategoriesListView(Category, ListView):
    model = SubCategory
    queryset = SubCategory.objects.all()
    template_name = 'catalog/subcategory_list.html'
    context_object_name = 'subcategory_list'`
python django
1个回答
0
投票

您可以根据项目的主键进行过滤:

#                   no Category 🖟
class SubCategoriesListView(ListView):
    model = SubCategory
    queryset = SubCategory.objects.all()
    template_name = 'catalog/subcategory_list.html'
    context_object_name = 'subcategory_list'

    def get_queryset(self, *args, **kwargs):
        return (
            super()
            .get_queryset(*args, **kwargs)
            .filter(category_id=kwargs['category_id'])
        )

urls.py
中,我们将其注册为:

urlpatterns = [
    path(
        'category/<int:category_id>/',
        SubCategoriesListView.as_view(),
        name='subcategories',
    )
]

然后,您可以访问

category/14
例如,获取属于
SubCategory
且带有
Category
的所有
pk=14
的列表。

© www.soinside.com 2019 - 2024. All rights reserved.