【发布时间】:2012-09-20 19:34:54
【问题描述】:
我已经尝试了几个小时,并查看了很多文档,但我无法正确理解。我认为我不会很快看到解决方案,所以也许有人可以看到问题所在?
我想要一个视图来显示我的所有类别以及与这些类别相关的所有条目。
我尝试过这个例子:django class-based-views topic
但我得到这个错误:元组索引超出范围
我的模特:
STATUS_CHOICES = (
('d', 'Draft'),
('p', 'Published'),
('w', 'Whitdrawn'),
)
class PublishedManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
return super(PublishedManager, self).get_query_set().filter(status='p')
class Category(models.Model):
name = models.CharField()
slug = models.SlugField()
status = models.CharField(max_length=1, default='d', choices=STATUS_CHOICES)
published = PublishedManager()
class Entry(models.Model):
name = models.CharField()
slug = models.SlugField()
category = models.ForeignKey(Category)
status = models.CharField(max_length=1, default='d', choices=STATUS_CHOICES)
published = PublishedManager()
我的网址
#View for all categories and all connected entries
url(r'^blog/$', AllCategories.as_view()),
#View for one category - and all the connected entries
url(r'^blog/(?P<slug>[-\w]+)/$', CategoryList.as_view()),
我的看法
class AllCategories(ListView):
context_object_name = "category_list"
queryset = Category.published.all()
class CategoryList(ListView):
template_name = 'blog/category_and_connected_entries.html'
def get_queryset(self):
self.category = get_object_or_404(Category, self=self.kwargs['slug'])
return Entry.published.filter(category=self.category)
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(CategoryList, self).get_context_data(**kwargs)
# Add in the category
context['category'] = self.category
return context
非常感谢任何帮助!
编辑:
添加了我的自定义管理器。 我只是在我的模板中没有显示未发布的整体以列出我的 all 我的类别和 all 他们连接的整体,例如:
- 类别 1
- 已发布条目 1
- 已发布条目 3
- 类别 2
- 已发布条目 7
- 已发布条目 9
我使用这个 for 循环来获取连接的整体,但它也列出了未发布的整体:
{% for entry in category.entry_set.all %}
【问题讨论】:
-
对不起,我现在去睡觉了,伙计,但我只是注意到您确实让 listview 进行了正确的查询,所以问题很可能是您的模板代码可以轻松修复。我明天检查你或其他人可以提供帮助。
-
现在我在我的模板中执行 {% if entry.status == "p" %} ,但我认为最好获得所有已发布条目的正确查询集,我只是不这样做知道我将如何得到它。
标签: django django-class-based-views