添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我如何在Django中获得一个在其他类别下有相同名称的特定子类别?

1 人关注

我有一个商店应用程序,有 categories subcategories ,我有3个类别,每个类别下有一个叫做 Other 的子类别,当我点击 url 时,我得到这个错误。

MultipleObjectsReturned at /categories/subcategory/Other, get() returned more than one SubCategory -- it returned 3!

我意识到使用 filter 不是一个选项,因为它将返回3个值,而一个url不能接受queryset作为参数,我能否以某种方式也使用子分类类别 title 来过滤查询,或者你有什么其他想法?

Here is the code:

urls.py

path('subcategory/<str:title>/', views.subcategory, name='subcategory'),

views.py

def subcategory(request, title):
    subcategory = SubCategory.objects.get(title=title)
    products = Product.objects.filter(subcategory=subcategory)
    return render(request, 'subcategory.html', {'subcategory': subcategory,
                                                'products': products})

这是我的模型。

models.py

class Category(models.Model):
    title = models.CharField(max_length=200, unique=True, blank=False, null=False)
class SubCategory(models.Model):    
    title = models.CharField(max_length=200, unique=False, blank=False)
    category = models.ForeignKey(Category, 
                                 related_name='subcategories', 
                                 on_delete=models.CASCADE)
    
3 个评论
Amit
请展示你的models.py
你可以通过写 SubCategory.objects.filter(title=title).last() 来摆脱错误。但我不认为这是你想要的。你为什么使用url中的非唯一字段作为标识符? 包括你的问题中的模型将有助于获得更清晰的答案)。
好的,我马上就会把我的模型包括进去
python
django
SLDem
SLDem
发布于 2020-12-30
1 个回答
Willem Van Onsem
Willem Van Onsem
发布于 2020-12-30
已采纳
0 人赞同

你可以用 products 过滤。

products = Product.objects.filter(subcategory__title=title)

所以你可以检索 SubCategory (可以是多个)和 Product 的查询集。

def subcategory(request, title):
    subcategory = SubCategory.objects.filter(title=title)
    products = Product.objects.filter(subcategory__title=title)