简体   繁体   中英

Django - Get data from another model in Detailview

I'm trying to get objects from two models using DetailView. First I set urls.py:

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

I've created a model:

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)

and the DetailView:

class PageDetailView(DetailView):
    model = Pages

    def get_queryset(self):
        return super(PageDetailView, self).get_queryset().filter(site_id=4)

I've set .filter(site_id=4) because there are some pages with some slug (home) and I want to retrieve the page only for selected site (site_id=4 in my db).

Now, in my template, I can use:

{{ object.name }}

to retrieve the page name but, I need to get some info of another table, in this view. How can I do it? Thanks!

You can add extra context by overriding 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM