Django模板中的“查询和多个类别”模型下拉菜单过滤

问题描述

我希望下拉菜单中的过滤器可以从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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...