我在 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'`
您可以根据项目的主键进行过滤:
# 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
的列表。