通过在url中传递参数在django中按大小筛选产品
我在django网站工作。我有一个显示产品的产品页面。我想根据产品中可用的尺寸筛选产品。 这是我的url,后跟views.py和models.py:通过在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>/&
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的产品进行格式化