【发布时间】:2018-04-07 14:19:57
【问题描述】:
我正在尝试为产品颜色创建过滤器。
产品由 csv 导入,每种颜色都有很大的不同,例如迷彩、淡紫色、赤褐色。
我想创建一个带有标准颜色选择的过滤器,例如红色、蓝绿色。
When one of the standard colours is selected, I would like to query the database and return all products that contain that colour (or that are in that colour category).
例如,如果选择了蓝色,过滤器将返回包含以下颜色的任何产品的查询集:蓝色、蓝绿色、绿松石色、青色、牛仔布。
我曾尝试使用 django 过滤器(选择)来执行此操作,但无法提出解决方案。
有人知道最好的方法吗?
当前产品型号
class Product(models.Model):
aw_deep_link = models.CharField(max_length=500, default='')
product_name = models.CharField(max_length=500, default='')
aw_image_url = models.CharField(max_length=500, default='')
search_price = models.DecimalField(max_digits=6, decimal_places=2, null=True)
merchant_name = models.CharField(max_length=500, default='')
display_price = models.CharField(max_length=500, default='')
brand_name = models.ForeignKey('Brand', on_delete=models.CASCADE)
size = models.ForeignKey('Size', on_delete=models.CASCADE)
colour = models.CharField(max_length=500, choices=COLOURS, default='')
rrp_price = models.DecimalField(max_digits=6, decimal_places=2, null=True)
category = TreeForeignKey('Category',null=True,blank=True, on_delete=models.CASCADE)
description = models.CharField(max_length=500, default='')
def __str__(self):
return self.product_name
当前过滤器
import django_filters
from .models import Product, Brand, Category
from django.forms import CheckboxSelectMultiple
class ProductFilter(django_filters.FilterSet):
search_price__gt = django_filters.NumberFilter(name='search_price', lookup_expr='gt')
search_price__lt = django_filters.NumberFilter(name='search_price', lookup_expr='lt')
brand_name = django_filters.filters.ModelMultipleChoiceFilter( label='Brand',widget=CheckboxSelectMultiple, queryset = Brand.objects.all())
colour = django_filters.filters.MultipleChoiceFilter(choices=COLOURS, widget=CheckboxSelectMultiple)
class Meta:
model = Product
fields = ['colour', 'brand_name']
【问题讨论】:
标签: django