我正在尝试使用DetailView从两个模型中获取对象。 首先我设置urls.py:
url(r'^page/(?P<slug>[-\w]+)/$', PageDetailView.as_view(), name='page-detail'),
我创建了一个模型:
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)
和DetailView:
class PageDetailView(DetailView):
model = Pages
def get_queryset(self):
return super(PageDetailView, self).get_queryset().filter(site_id=4)
我设置了.filter(site_id = 4),因为有一些页面有一些 slug(home)我想只检索选定网站的页面 (我的数据库中的site_id = 4)。
现在,在我的模板中,我可以使用:
{{ object.name }}
检索页面名称但是,我需要在此视图中获取另一个表的一些信息。 我该怎么做? 谢谢!
答案 0 :(得分:6)
您可以通过覆盖get_context_data
来add extra context。
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