jondykeman
jondykeman

Reputation: 6272

Query multiple models with class-based views

I would like to solve the following situation.

I have a side panel containing information of the active user. For this an instance of UserInfo model needs to be passed to the views.

Additionally, I would like to pass a number of other model instances to the pages (eg. Purchases, Favourites, etc.).

I know this is pretty easy to do by overriding the get_context_data.

def get_context_data(self, **kwargs):
    kwargs['purchases'] = Purchases.objects.get(id=1)
    kwargs['favourites'] = Favourites.objects.get(id=1)
    .... etc
    return super(UploadFileView, self).get_context_data(**kwargs)

So my question is - what would be the best/most appropriate CBV to use for this?

Upvotes: 3

Views: 2944

Answers (2)

Victor Bruno
Victor Bruno

Reputation: 1043

If you are querying the same UserInfo, Purchases, Favorites, etc in multiple views, create a Mixin that you can re-use.

class CommonUserInfoMixin (object):
    def get_context_data(self, **kwargs):
        context = super(OrgContextMixin, self).get_context_data(**kwargs)
        ... # Add more to context object

Then you can use this in your normal List, Detail, Update, etc CBV's

class ItemList(CommonUserInfoMixin, ListView):
    ....

Upvotes: 2

dokkaebi
dokkaebi

Reputation: 9190

This isn't quite a DetailView as you have multiple objects, but it isn't a ListView either, nor does it look like a FormView or its children.

Since you gain nothing from those, a simple TemplateView is probably the way to go.

Upvotes: 6

Related Questions