Search code examples
djangodjango-modelsdjango-filterdjango-tables2

how to see data of user specified through django-table2?


Hello i want to make a table where one can see only his created rows and not others so i have specified a user for everyrow previously i used it like this -

def see(request):
    as=A.objects.filter(user=request.user)
    return render(request,'m/see.html',{'as':as})

this was working perfectly fine later i rendered a table through Django table 2 my tables .py is

class ATable(tables.Table):
    class Meta:
        model = A
        exclude = ('aid',)
        per_page = 2

i want to make it user specific so that i can only see data entered from myuserid not all my filter.py code is

class AFilter(df.FilterSet):
    class Meta:
        model = A
        exclude = ('aid',)

kindly help what and where should i write to specify the user

Updated- Views.py

class AList(PagedFilteredTableView):
    model = A
    template_name = "m/see.html"
    table_class = ATable
    filter_class = AFilter
    formhelper_class = AListFormHelper

Utils.py

from django_tables2 import SingleTableView
from django_tables2.config import RequestConfig

class PagedFilteredTableView(SingleTableView):
    filter_class = None
    formhelper_class = None
    context_filter_name = 'filter'

    def get_queryset(self, **kwargs):
        qs = super(PagedFilteredTableView, self).get_queryset()
        self.filter = self.filter_class(self.request.GET, queryset=qs)
        self.filter.form.helper = self.formhelper_class()
        return self.filter.qs

    def get_context_data(self, **kwargs):
        context = super(PagedFilteredTableView, self).get_context_data()
        context[self.context_filter_name] = self.filter
        return context

Solution

  • You can override get_queryset method like following.

    class AList(PagedFilteredTableView):
        model = A
        template_name = "m/see.html"
        table_class = ATable
        filter_class = AFilter
        formhelper_class = AListFormHelper
    
        def get_queryset(self, **kwargs):
            qs = super(AList, self).get_queryset()
            qs = qs.filter(user=self.request.user)
            return qs