问题描述
我希望下拉菜单中的过滤器可以从2个模型(类别[视频,照片])和场合[婚礼,订婚,洗礼等)中获取查询,这是我的代码:
models.py
class Category(models.Model):
class Meta:
verbose_name_plural = "Categories"
name = models.CharField(max_length=254)
friendly_name = models.CharField(max_length=254,null=True,blank=True)
def __str__(self):
return self.name
def get_friendly_name(self):
return self.friendly_name
class Occasion(models.Model):
name = models.CharField(max_length=254)
friendly_name = models.CharField(max_length=254,blank=True)
def __str__(self):
return self.name
def get_friendly_name(self):
return self.friendly_name
class Package(models.Model):
name = models.CharField(max_length=254)
friendly_name = models.CharField(max_length=254,blank=True)
def __str__(self):
return self.name
def get_friendly_name(self):
return self.friendly_name
class Product(models.Model):
category = models.ForeignKey('Category',blank=True,on_delete=models.SET_NULL)
occasion = models.ForeignKey('Occasion',on_delete=models.SET_NULL)
package = models.ForeignKey('Package',on_delete=models.SET_NULL)
long_description = models.TextField()
short_description = models.TextField()
things_include = models.TextField()
price = models.DecimalField(max_digits=6,decimal_places=2)
rating = models.DecimalField(max_digits=6,decimal_places=2,blank=True)
image_url = models.URLField(max_length=1024,blank=True)
image = models.ImageField(null=True,blank=True)
def __str__(self):
return self.category.name + " - " + self.occasion.name
def thingsInclude_as_list(self):
return self.things_include.split(',')
def get_name_categoryOccasion(self):
return self.category.name + " " + self.occasion.name
views.py 在这里,我可以从数据库中查询所有模型
def all_products(request):
""" A view to show all products,including sorting and search queries """
products = Product.objects.all()
query = None
categories = None
occasions = None
if request.GET:
if 'category' in request.GET:
categories = request.GET['category'].split(",")
products = products.filter(category__name__in=categories)
categories = Category.objects.filter(name__in=categories)
elif 'occasion' in request.GET:
occasions = request.GET['occasion'].split(",")
products = products.filter(occasion__name__in=occasions)
occasions = Occasion.objects.filter(name__in=occasions)
if 'q' in request.GET:
query = request.GET['q']
if not query:
messages.error(request,"You didn't enter any search criteria!")
return redirect(reverse('products'))
queries = Q(category__friendly_name__icontains=query) | Q(long_description__icontains=query) | Q(things_include__icontains=query) | Q(package__friendly_name__icontains=query) | Q(occasion__friendly_name__icontains=query)
products = products.filter(queries)
context = {
"products": products,"search_term": query,"current_categories": categories,"current_occasions": occasions,}
return render(request,"products/products.html",context)
模板 您可以在图片中看到我如何在html模板中使用过滤 enter image description here
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)