Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过在url中传递参数在django中按大小筛选产品_Django - Fatal编程技术网

通过在url中传递参数在django中按大小筛选产品

通过在url中传递参数在django中按大小筛选产品,django,Django,我在django网站工作。我有一个显示产品的产品页面。我想根据产品中可用的尺寸筛选产品。 这是我的url,后跟views.py和models.py: path("products/<str:type>/<str:sort>/<str:size>",views.products,name="products"), path("products/<str:type>/<str:sort>/&

我在django网站工作。我有一个显示产品的产品页面。我想根据产品中可用的尺寸筛选产品。 这是我的url,后跟views.py和models.py:

path("products/<str:type>/<str:sort>/<str:size>",views.products,name="products"),
path("products/<str:type>/<str:sort>/",views.products,{'size':''}),

def products(request,type,sort,size):
    sorting = ['category_id']
    if sort == 'all':
        sorting.append('timeadded')
    elif sort == 'new':
        sorting.append('-timeadded')
    elif sort == 'priceltoh':
        sorting.append('price')
    elif sort == 'pricehtol':
        sorting.append('-price')
    prods=Product.objects.filter(category__type=type).order_by(*sorting)
    context = {
        'categories':Category.objects.filter(type=type),
        'prods':prods,
    }    
    return render(request,"products.html",context)
class Product(models.Model):
    S=models.IntegerField(blank=True,null=True,default=0) #example value 2
    M=models.IntegerField(blank=True,null=True,default=0) #example value 0
    L=models.IntegerField(blank=True,null=True,default=0) #example value 1
我已经移除了我认为此处不需要的部件: 我想做的是,例如,如果我在url中将L作为大小传递,那么产品应该进行过滤,以便显示L>0的所有产品。另外,如果选择了一个尺寸,那么对于该尺寸,没有一个产品的尺寸大于0,那么我会相应地在模板中发送一条消息。我尝试了几种方法来实现它,但效率很低。如果有任何帮助,我们将不胜感激。谢谢你可以这样尝试:

def products(request,type,sort,size=None):
    query = {'product__type':type}
    if size and size in ['L','M','S'] :
        query['{}__gt'.format(size)] = 0
    prods=Product.objects.filter(**query).order_by(*sorting)

在这里,我正在构建一个包含查询的词典。然后我打开字典并通过
filter()
方法传递它。

如果大小和大小在['L','M','S']中,这两行
是什么意思:query['{}\ugt'。format(size)]=0
你能简单解释一下它们返回的意思吗。还有format做什么?还有does=0意味着格式化该大小为0的产品。它们不返回0,它正在进行如下查询
S\u gt=0
,表示此查询将筛选值大于0的大小
S
的产品。如果该大小的整数值为负值,则此值为0是否也有效,或者仅对大小为0的产品进行格式化