gpt4 book ai didi

Django 分类、子分类和子分类

转载 作者:行者123 更新时间:2023-12-04 22:07:07 31 4
gpt4 key购买 nike

我有一个简单的类别模型:

class Category(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField()
parent = models.ForeignKey('self', blank = True, null = True, related_name="children")

起初,我的数据似乎只需要类别和子类别,但我意识到在某些情况下我仍然想进行子分类。

我希望我的网址是类别/子类别/子子类别

我正在考虑如何实现这一点,但我不确定,因为我的 url 模式匹配如下所示:
url(r'^business/(?P<parent>[-\w]+)/(?P<category_name>[-\w]+)$', 'directory.views.show_category'),

基本上只允许一个子类别,因为我的 View 方法接受这两个参数。

处理这个问题的最佳方法是什么?

最佳答案

无限级别呢?在 urls.py:

url(r'^business/(?P<hierarchy>.+)/', 'directory.views.show_category')

在目录/views.py:
def show_category(request, hierarchy):
category_slugs = hierarchy.split('/')
categories = []
for slug in category_slugs:
if not categories:
parent = None
else:
parent = categories[-1]
category = get_object_or_404(Category, slug=slug, parent=parent)
categories.append(category)
...

不要忘记添加 unique_together = ('slug', 'parent',)到 Category.Meta,否则你就完蛋了。

[更新]

could I just query the db with category_slugs[-1] and if the obtained category has no children, we know its a leaf category, otherwise, we know it has subcategories and we show them? – alexBrand



@alexBrand:考虑以下假设 URL:
/business/manufacture/frozen/pizza/
/business/restaurant/italian/pizza/
/business/delivery-only/italian/pizza/
/business/sports/eating-contest/pizza/

如果您认为这种情况是可能的,那么恕我直言,一个更简单的测试(没有整个层次结构)是不够的。

您对提议的解决方案的真正担忧是什么?在循环结束时,变量类别将保存正确的 category_slugs[-1] ,您将在 categories 中获得整个层次结构。 .不要担心性能,我最好的建议是:在分析之前不要尝试优化优雅的解决方案(您会感到惊讶)。

关于Django 分类、子分类和子分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492190/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com