Получение контекста родительского элемента во внешнем ключе — Django

#django #django-views

#django #django-представления

Вопрос:

Предполагается, что это действительно просто, и это есть в документах. Я пытаюсь получить контекст ListView. Например:

«Мы также можем одновременно добавить издателя в контекст, чтобы использовать его в шаблоне http://docs.djangoproject.com/en/1.3/topics/class-based-views/#dynamic-filtering /:

 class IssuesByTitleView(ListView):
    context_object_name = "issue_list"
    def get_queryset(self):
        self.title = get_object_or_404(Title, slug=self.kwargs['title_slug'])
        return Issue.objects.filter(title=self.title).order_by('-number')
  

Мой models.py выглядит примерно так:

 class Title(models.Model):
    CATEGORY_CHOICES = (
    ('Ongoing', 'Ongoing'),    
    ('Ongoing - Canceled', 'Ongoing - Canceled'),
    ('Limited Series', 'Limited Series'),
    ('One-shot', 'One-shot'),
    ('Other', 'Other'),
    )    
    title = models.CharField(max_length=64)
    vol = models.IntegerField(blank=True, null=True, max_length=3)
    year = models.CharField(blank=True, null=True, max_length=20, help_text="Ex) 1980 - present, 1980 - 1989.")
    category = models.CharField(max_length=30, choices=CATEGORY_CHOICES)    
    is_current = models.BooleanField(help_text="Check if the title is being published where Emma makes regular appearances.")
    slug = models.SlugField()
    class Meta:
        ordering = ['title']
    def get_absolute_url(self):
        return "/titles/%s" % self.slug        
    def __unicode__(self):
        return self.title

    class Issue(models.Model):
        CATEGORY_CHOICES = (
        ('Major', 'Major'),    
        ('Minor', 'Minor'),
        ('Cameo', 'Cameo'),
        ('Other', 'Other'),
        )
        title = models.ForeignKey(Title)
        number = models.IntegerField(help_text="Do not include the '#'.")

        .........
  

Views.py:

 class IssuesByTitleView(ListView):
    context_object_name = "issue_list"
    def get_queryset(self):
        self.title = get_object_or_404(Title, slug=self.kwargs['title_slug'])
        return Issue.objects.filter(title=self.title).order_by('-number')
    def get_context_data(self):
        context = super(IssuesByTitleView, self).get_context_data()
        context['title'] = self.title
        return context
  

В моем списке проблем в заголовке мне нужно вернуть заголовок и все другие свойства заголовка. Это там не работает и возвращает ошибку:

get_context_data() получила неожиданный аргумент ключевого слова ‘object_list’

Ответ №1:

Вы должны использовать ** kwargs в get_context_data

 def get_context_data(self, **kwargs):
    context = super(IssuesByTitleView, self).get_context_data(**kwargs)
    context['title'] = self.title
    return context
  

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

1. Какие ** kwargs я использую, programmersbook?

2. Он просто передает заданные аргументы значения ключа следующему методу