Как фильтровать категории и подкатегории с помощью просмотра списка в Django
У меня есть модели Category и SubCategory в Django, и мне нужно получить потомка модели Category в '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'`
Вы можете фильтровать по первичному ключу элемента:
# 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
.