Django - 从Detailview中的另一个模型获取数据

Mir*_*bin 0 python django

我正在尝试使用DetailView从两个模型中获取对象.首先我设置urls.py:

url(r'^page/(?P<slug>[-\w]+)/$', PageDetailView.as_view(), name='page-detail'),
Run Code Online (Sandbox Code Playgroud)

我创建了一个模型:

class PageContainer(models.Model):
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    slug = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Pages(models.Model):
    pageContainer = models.ForeignKey(PageContainer, on_delete=models.CASCADE)
    uniq = models.CharField(max_length=200)
    name = models.CharField(max_length=200)
    slug = models.CharField(max_length=200)
    body = models.TextField()
    site = models.ForeignKey(Site, on_delete=models.CASCADE)

    class Meta:
        verbose_name = "Page"
        verbose_name_plural = "Pages"

    def __str__(self):
        return self.name

    def was_published_recently(self):
        return self.date >= timezone.now() - datetime.timedelta(days=1)
Run Code Online (Sandbox Code Playgroud)

和DetailView:

class PageDetailView(DetailView):
    model = Pages

    def get_queryset(self):
        return super(PageDetailView, self).get_queryset().filter(site_id=4)
Run Code Online (Sandbox Code Playgroud)

我设置了.filter(site_id = 4),因为有些页面有一些slug(home),我想只检索选定网站的页面(我的数据库中的site_id = 4).

现在,在我的模板中,我可以使用:

{{ object.name }}
Run Code Online (Sandbox Code Playgroud)

检索页面名称但是,我需要在此视图中获取另一个表的一些信息.我该怎么做?谢谢!

Ala*_*air 6

您可以通过覆盖添加额外的上下文get_context_data.

class PageDetailView(DetailView):
    ...

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(PageDetailView, self).get_context_data(**kwargs)
        # Add extra context from another model
        context['other_model'] = OtherModel.objects.get(...)
        return context
Run Code Online (Sandbox Code Playgroud)