[Django] Any generalised or optimized way of handling multiple class based generic listviews in django ?

42 views
Skip to first unread message

Dilipkumar Noone

unread,
Oct 6, 2019, 4:23:46 AM10/6/19
to Django users
Dear Django Users,

I am beginner in Django .

I have multiple generic list views in my django application where each list is handled under different navigation item of navigation bar .

Still i need to handle few more list views using class based generic view.

Is there any way to generalize or optimize in handling classbased genericlistview which reduces the code size when we need to handle multiple
lists in django application under each navigation item of navbar.?

Note: Each navigation item(webpage) has a list  & above the list we have a search form with filter button to search for a particular value.
          Each list view handles get_query_set and get_context_data .          
          get_query_set displays to retrieve the list of objects for a specific filter in a model when GET request occurs.

          get_context_data used to display the list of  objects and checks if request is GET and requested for a page in a list of pages listed using pagination.
          If key is a page continues the loop and it returns the context with the list of objects for the requested page as a key.

        

==========================================================================================================================================
List1:

class GSPDCList(ListView):


List2:

class GSPECList(ListView):

List3:
 =================:

List4:
 ================(ListView):

This concept i need to apply in my django app with multiple class based generic views where each listview specific to diff model and filter options.

        So please suggest and optimized way of handling this requirement to reduce the code size.


Regards,
N.Dilip Kumar.

Pradeep Sukhwani

unread,
Oct 7, 2019, 3:48:41 AM10/7/19
to Django users


Hi Dilip,
A few days back I stuck at the same issue, then I tried with the queryset union functionality:


class MultiFilterPlacesListView(ListAPIView):
     """Custom queryset api view. Does not implement pagination"""

     pagination_class = None # Import custom pagination if you need the pagination.
     queryset = Places.objects.all()
     slice_size = 10  # count limit for each of the source queries

     def get_queryset(self):
         """Combine queries from new, editor choice and popular"""
         new_qs = self.queryset.filter(new_place=True)[:self.slice_size]
         editor_qs = self.queryset.filter(editor_choice=True)[:self.slice_size]
         popular_qs = self.queryset.filter(popular=True)[:self.slice_size]

         return new_qs.union(editor_qs, popular_qs, all=True) # Output will be union of the above two querysets

Doc: Django
Example: StackOverflow

Note:
if you are doing the union, then you won't get the pagination. In my case, I also needed pagination so I wrote custom pagination.

Dilipkumar Noone

unread,
Oct 7, 2019, 11:11:53 AM10/7/19
to Django users
Dear Pradep Sukhwani,

The Below QuerySetUnion functionality will work if you have multiple querysets from one model as per my understanding.

How to proceed if i have different number of querysets from multiple models.
 [ say 5 models in my django project ,each has one queryset and context data.  ]

This case how to proceed ?
 

Regards,
N.Dilip Kumar.


On Sunday, October 6, 2019 at 1:53:46 PM UTC+5:30, Dilipkumar Noone wrote:
Reply all
Reply to author
Forward
0 new messages