我知道这是Django中一个非常基本的概念,我已经尝试了教程,但它无法正常工作。我正在制作一个漫画书数据库,其模型设置如下(至少是两个模型的样本):
Class Title(models.Model):
title = models.CharField(max_length=256)
vol = models.IntegerField("Vol.")
slug = models.SlugField(blank=True, null=True)
#desc = models.CharField(max_length=256)
class Meta:
ordering = ['title']
def get_absolute_url(self):
return "/comics2/title/%s" % self.slug
def __unicode__(self):
return self.title
class Issue(models.Model):
title = models.ForeignKey(Title)
number = models.IntegerField(help_text="Enter the number only. Do not include the hashtag.")
writer = models.ManyToManyField(Creator)
我要做的是创建一个页面,显示该标题中所有问题的列表。
但是,我在这样的视图中设置了它:
class AstonishingXMenIssueListView(ListView):
context_object_name = "astonishing_list"
queryset = Issue.objects.filter(title__title="Astonishing X-Men").order_by("number")
template_name = "comics2/astonishing_list.html"
我的urls.py看起来像这样:
(r'^comics2/title/(?P<title_slug>[-\w]+)/$', AstonishingXMenIssueListView.as_view(
)),
当然,转到/ uncanny-xmen-v1 /会显示与上面的惊人链接相同的内容。
显然,这不是按照标题列出未来问题和标题问题的实用方法,因此我需要进行设置,以便我不必单独执行此操作。现在,我尝试了遵循Django通用视图教程,但我得到了一个索引元组错误。
我试过这个,但它不起作用。这就是我的索引元组错误。
class IssuesByTitleView(ListView):
context_object_name = "issues_by_title_list"
template_name = "comics2/issues_by_title.html",
def get_queryset(self):
title = get_object_or_404(Title, title__iexact=self.args[0])
return Issue.objects.filter(title=title)
有什么想法吗?有人可以用婴儿语言回复,因为我是Django和Python的新手,所以只是告诉我再看一下Tutorial并不会有帮助。所以,也许写出代码会有所帮助!谢谢!
答案 0 :(得分:1)
通常,您的IssueByTitleView
是正确的方法。但是,当您在网址正则表达式(网址的(?P<title_slug>[-\w]+)
部分)中使用命名组时,您必须通过self.kwargs
而不是self.args
访问网址参数。此外,您必须过滤slug
字段,而不是title
字段:
title = get_object_or_404(Title, slug=self.kwargs['title_slug'])