Django 精确查找的QuerySet值必须限制为使用切片的一个结果。过滤错误
我不能过滤相同的slug值。问题是,我需要两个相同的鼻涕虫类型,我不知道如何修复它。我有两个带有slug(kind)>“silikonovyj chehol”的产品,我尝试对其进行过滤,但有一个Django 精确查找的QuerySet值必须限制为使用切片的一个结果。过滤错误,django,Django,我不能过滤相同的slug值。问题是,我需要两个相同的鼻涕虫类型,我不知道如何修复它。我有两个带有slug(kind)>“silikonovyj chehol”的产品,我尝试对其进行过滤,但有一个用于精确查找的QuerySet值必须限制为使用切片的一个结果。 视图.py def product_list(request, category=None, subcategory=None, kind=None): if category: category = Category
用于精确查找的QuerySet值必须限制为使用切片的一个结果。
视图.py
def product_list(request, category=None, subcategory=None, kind=None):
if category:
category = Category.objects.get(slug=category)
categories = Category.objects.all()
subcategories = Subcategory.objects.filter(category=category)
products = Product.objects.filter(category=category, available=True)
kinds = None
if subcategory:
subcategory = Subcategory.objects.get(slug=subcategory)
kinds = Kind.objects.filter(kind=subcategory)
products = Product.objects.filter(category=category, subcategory=subcategory, available=True)
if kind:
kind = Kind.objects.filter(slug=kind) # ERROR IT'S HERE
products = Product.objects.filter(category=category, subcategory=subcategory, kind=kind, available=True)
context = {
'categories':categories,
'category':category,
'subcategories':subcategories,
'subcategory':subcategory,
'products':products,
'kinds':kinds,
}
return render(request, 'shop/product/product_list.html', context)
else:
categories = Category.objects.all()
products = Product.objects.filter(available=True)
context = {'categories':categories, 'products':products}
return render(request, 'shop/product/product_list.html', context)
class Category(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
class Subcategory(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
class Kind(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
kind = models.ForeignKey(Subcategory, on_delete=models.PROTECT)
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
subcategory = models.ForeignKey(Subcategory, on_delete=models.PROTECT)
kind = models.ForeignKey(Kind, on_delete=models.PROTECT)
name = models.CharField(max_length=200, db_index=True)
产品列表.html
{% if subcategory %}
{% for kind in kinds %}
<a href="{% url 'shop:lst_by_knds' category.slug subcategory.slug kind.slug %}">{{ kind.name }}</a>
{% endfor %}
{% endif %}
型号.py
def product_list(request, category=None, subcategory=None, kind=None):
if category:
category = Category.objects.get(slug=category)
categories = Category.objects.all()
subcategories = Subcategory.objects.filter(category=category)
products = Product.objects.filter(category=category, available=True)
kinds = None
if subcategory:
subcategory = Subcategory.objects.get(slug=subcategory)
kinds = Kind.objects.filter(kind=subcategory)
products = Product.objects.filter(category=category, subcategory=subcategory, available=True)
if kind:
kind = Kind.objects.filter(slug=kind) # ERROR IT'S HERE
products = Product.objects.filter(category=category, subcategory=subcategory, kind=kind, available=True)
context = {
'categories':categories,
'category':category,
'subcategories':subcategories,
'subcategory':subcategory,
'products':products,
'kinds':kinds,
}
return render(request, 'shop/product/product_list.html', context)
else:
categories = Category.objects.all()
products = Product.objects.filter(available=True)
context = {'categories':categories, 'products':products}
return render(request, 'shop/product/product_list.html', context)
class Category(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
class Subcategory(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
class Kind(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
kind = models.ForeignKey(Subcategory, on_delete=models.PROTECT)
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
subcategory = models.ForeignKey(Subcategory, on_delete=models.PROTECT)
kind = models.ForeignKey(Kind, on_delete=models.PROTECT)
name = models.CharField(max_length=200, db_index=True)
或者,如果我改变这一行,我已经get()返回了不止一种——它返回了2!错误
if kind:
kind = Kind.objects.get(slug=kind)
这:
应为:
products = Product.objects.filter(category=category, subcategory=subcategory, kind=kind[0], available=True)
如果要基于一种进行筛选
或:
如果要对上面返回的所有kind
对象过滤产品
products = Product.objects.filter(category=category, subcategory=subcategory, kind=kind[0], available=True)
products = Product.objects.filter(category=category, subcategory=subcategory, kind__in=kind, available=True)