2013-02-18 4 views
4

У меня есть две модели: опубликованые и БаннерДжанго - DetailView как отображать две модели одновременно

, когда я с помощью «общий вид» DetailView Как я могу принести две модели в то же время ниже код приносят только один Реклама

Мой url.py

url(r'^(?P<pk>\d+)/$', DetailView.as_view(
    model    = Advertisment, 
    context_object_name = 'advertisment', 
), name='cars-advertisment-detail'), 

ответ

6

Конечно, просто переопределить get_context_data, чтобы добавить материал в контексте.

url(r'^(?P<pk>\d+)/$', YourDetailView.as_view(), name='cars-advertisment-detail'), 

class YourDetailView(DetailView): 
    context_object_name = "advertisment" 
    model = Advertisement 

    def get_context_data(self, **kwargs): 
     """ 
     This has been overridden to add `car` to the templates context, 
     so you can use {{ car }} etc. within the template 
     """ 
     context = super(YourDetailView, self).get_context_data(**kwargs) 
     context["car"] = Car.objects.get(registration="DK52 WLG") 
     return context 
4

Для меня, это легче сделать пользовательский подмешать так:

class ExtraContextMixin(object): 

    def get_context_data(self, **kwargs): 
     context = super(ExtraContextMixin, self).get_context_data(**kwargs) 
     context.update(self.extra()) 
     return context 

    def extra(self): 
     return dict() 

Позже вы можете просто сабами это подмешать, а затем переопределить extra так:

class MyDetailView(ExtraContextMixin, DetailView): 

    def extra(self): 
     extra = Extra.objects.all() 
     return dict(extra = extra) 

I думаю, что это более чистое, чем переопределение get_context_data

Смежные вопросы