Просмотр подмножества объектов в Django, представлениях, URL-адресах, моделях

#django

#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, поэтому простое указание мне снова просмотреть руководство не поможет. Итак, возможно, написание кода помогло бы! Спасибо!

Ответ №1:

Как правило, ваш IssueByTitleView правильный способ сделать это. Но поскольку вы используете именованные группы в своем регулярном выражении URL ( (?P<title_slug>[-w] ) часть вашего URL), вам приходится обращаться к параметрам URL через self.kwargs вместо self.args . Кроме того, вы должны фильтровать по slug полю, а не по title полю:

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

Комментарии:

1. Спасибо, @piquadrat. Это работает, хотя по какой-то причине шаблон не направляет на issues_by_title.html но вместо этого направляет на issue_list.html . У меня нигде в моих представлениях или URL-адресах нет списка проблем, и я закомментировал все экземпляры, если они у меня есть!