我正在与Django建立一个电子商务网站。我正在努力使用django_过滤器。我有模型类别、子类别和产品。当用户访问类别页面时,我希望根据该类别呈现产品品牌过滤器。例如,如果用户访问手机类别,我希望呈现品牌过滤器:苹果、三星、小米等。我实现了类似的效果,但缺点是它显示了所有品牌(与类别无关的产品品牌):佳能、三星、苹果、,博世等,所以我试图查询与该类别相关的产品品牌,并将其作为选择传递给Filterset。如何将品牌选择从view传递到FilterSet
#===模型。py=
class Category(models.Model):
title = models.CharField(max_length=30, verbose_name=_('Названия'))
slug = models.SlugField(null=False, unique=True)
image = models.ImageField(blank=True, upload_to='category_images/', verbose_name=_('Основное фото'))
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('Добавлено в'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('Изменено в'))
class Subcategory(models.Model):
category = models.ForeignKey(Category, related_name='subcategories', null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('Категория'))
title = models.CharField(max_length=150, blank=True, verbose_name=_('Названия'))
image = models.ImageField(blank=True, upload_to='subcategory_images/', verbose_name=_('Основное фото'))
slug = models.SlugField(max_length=150, unique=True)
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('Добавлено в'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('Изменено в'))
class Product(models.Model):
recommended_choices = (('YES', 'ДА'), ('NO', 'НЕТ'))
title = models.CharField(max_length=200, blank=True, verbose_name=_('Названия'))
category = models.ForeignKey(Category, related_name='category_items', on_delete=models.SET_NULL, null=True, blank=True, verbose_name=_('Категория'))
subcategory = models.ForeignKey(Subcategory, related_name='subcategory_items', on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('Подкатегория'))
price = models.DecimalField(max_digits=8, decimal_places=2,blank=True, verbose_name=_('Цена'))
brand = models.CharField(max_length=100,blank=True, verbose_name=_('Бренд'))
#===过滤器。py===
class ProductFilter(django_filters.FilterSet):
price = django_filters.RangeFilter(widget=django_filters.widgets.RangeWidget(attrs={'class' : 'range_filter', 'type' : 'hidden'}))
brand = django_filters.AllValuesMultipleFilter(field_name='brand', widget=forms.CheckboxSelectMultiple)
class Meta:
model = Product
fields = ['brand', 'price']
#===视图。py===
def category(request, category_slug):
category = Category.objects.get(slug=category_slug)
category_title = category.title
filtered_products = ProductFilter(request.GET, queryset=Product.objects.filter(category=category))
paginated_filtered_products = Paginator(filtered_products.qs, 28)
page_number = request.GET.get('page')
products_page = paginated_filtered_products.get_page(page_number)
context = {'filtered_products' : filtered_products, 'products_page' : products_page, 'category_title' : category_title}
return render(request, 'home/products.html', context)
def subcategory(request, category_slug, subcategory_slug):
subcategory = Subcategory.objects.get(slug=subcategory_slug)
subcategory_title = subcategory.title
current_category = subcategory.category
filtered_products = ProductFilter(request.GET, queryset=Product.objects.filter(subcategory=subcategory))
paginated_filtered_products = Paginator(filtered_products.qs, 28)
page_number = request.GET.get('page')
products_page = paginated_filtered_products.get_page(page_number)
context = {'filtered_products' : filtered_products, 'products_page' : products_page, 'subcategory_title' : subcategory_title, 'current_category' : current_category}
return render(request, 'home/products.html', context)
目前没有回答
相关问题 更多 >
编程相关推荐