2011-04-17 59 views
0

我知道这是在Django一个很基本的概念,我已经尝试了教程,但它不工作。我的工作与这样设置的模型一本漫画书数据库(至少两个型号的样品):在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(
    )), 

当然,去/不可思议-X战警-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的新手,所以简单地告诉我再次查看教程是不会有帮助的。所以,也许写出代码会有所帮助!谢谢!

回答

1

一般来说,你的IssueByTitleView是做正确的方式。但是,由于您在URL正则表达式中使用了命名组(您的URL的(?P<title_slug>[-\w]+)部分),因此您必须通过self.kwargs而不是self.args访问URL参数。此外,您必须对slug字段进行筛选,而不是title领域:

title = get_object_or_404(Title, slug=self.kwargs['title_slug']) 
+0

谢谢你,@piquadrat。尽管出于某种原因,这种方法很有效,但该模板不是指向issues_by_title.html,而是指向issue_list.html。我没有在我的视图或URL中的任何地方使用issue_list,并且我已经将所有实例注释掉了! – AAA 2011-04-17 18:55:30