2016-01-29 23 views
2

试图与类别和子类别一linkdirectory页,到目前为止以下,问题是,我不能让类别为纽带的Django组子类别

models.py 
class Category(models.Model): 
"""Category""" 
name = models.CharField(max_length=50) 
slug = models.SlugField() 

def save(self, *args, **kwargs): 

       #self.slug = slugify(self.name) 
     self.slug = slugify(self.name) 
     super(Category, self).save(*args, **kwargs) 
def __unicode__(self): 
return self.name 


class SubCategory(models.Model): 
"""Sub Category""" 
category = models.ForeignKey(Category) 
name = models.CharField(max_length=50) 
slug = models.SlugField() 

def save(self, *args, **kwargs): 

     self.slug = slugify(self.name) 
     super(SubCategory, self).save(*args, **kwargs) 

def __unicode__(self): 
return self.name  

views.py 
@require_GET 
def links(request): 
"""Linkdirectory Page""" 
categories = Category.objects.all() 
subcategories = SubCategory.objects.all() 
return render(request, 'links.html', {'categories':   categories,    'subcategories': subcategories,}) 

以组按类别的子类别我用在

{% regroup subcategories|dictsort:"category_id" by category as  categories_list %} 

<ul> 
{% for categories in categories_list %} 
<li>{{ categories.grouper }} 
      <li> <a href="/links/{{ categories.slug }}">{{ categories.name  }}</a></li> 
<ul> 
    {% for item in categories.list %} 
      <li><a href="/links/{{ item.slug }}">{{ item.name }}</a></li> 
    {% endfor %} 
</ul> 
</li> 
{% endfor %} 
</ul> 

这所有WOR以下KS分组很好的subcats一起

CAT1 --subcatLINK1 --subcatLINK2

但我想有是

CATLINK1 --subcatLINK1 --subcatLINK2

不知道如何以及如果它有可能取代石斑鱼字符串与自定义链接像子类别的链接,或者如果我正确的方式围绕这个

编辑,添加Bakkals方法如下: 再次编辑;)没关系,我不得不更新命名方案,显然,下面的代码是工作版本。 试图用category.subcategory_set.all由Bakkal

{% for category in categories %} 
<ul> 
<li><a href="/links/{{ category.slug }}">{{ category.name }}</a> 
{% for subcategory in category.subcategory_set.all %} 
<ul> 
      <li><a href="/links/{{ subcategory.slug }}">{{  subcategory.name }}</a></li> 
</ul> 
    {% endfor %} 
</li> 
</ul> 
{% endfor %} 
</li> 
</ul> 
{% endfor %} 

回答

1

的建议由于SubCategory包含一个ForeignKey到Category,您可以使用category.subcategory_set获得的子类别。

我找到比手工做这个简单的分组你没有被category_id

这样你就可以如通过categories所有Category对象的上下文模板的查询集,然后在模板

{% for category in categories %} 
    ... 
    {% for subcategory in category.subcategory_set.all %} 
    ... 
    {% endfor %} 
{% endfor %} 
+0

没有完全内,但它看起来像在正确的轨道。当使用这个我得到空的项目符号列表,但结构是好的,链接不会显示每个项目符号 – adamzia

+0

使用'prefetch_related'来减少查询的数量。例如'categories = Category.objects.all()。prefetch_related('subcategory_set')' – Todor

+0

这个工作,不得不更新链接本身的命名,很明显,非常感谢 – adamzia