查看Django,Views,URL,Models中的对象子集

时间:2011-04-17 16:03:55

标签: 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(
    )), 

当然,转到/ 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并不会有帮助。所以,也许写出代码会有所帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

通常,您的IssueByTitleView是正确的方法。但是,当您在网址正则表达式(网址的(?P<title_slug>[-\w]+)部分)中使用命名组时,您必须通过self.kwargs而不是self.args访问网址参数。此外,您必须过滤slug字段,而不是title字段:

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