Overriding queryset in Django Admin without effects

Sorry if I'm repetitive on a widely discussed topic, but I can't figure out where the error is, since debug returns the correct result, but the page in the browser does not. In short, I'm implementing an app that is multi-user and multi-tenant, with the use of the django-organizations module. Each model that identifies particular resources has a 'gruppo' field, Foreign Key to the specific tenant. Furthermore, the session contains the tenant('gruppo_utente') in use, in order to allow the change of one tenant to another simply by changing the data stored in the session.

    request.session['gruppo_utente']=int(tenant)  # =gruppo_id

This is the model:

//model.py 
from multigroup.models import Gruppo, GruppoUser
from mptt.models import MPTTModel, TreeForeignKey

class ContoCOGE (MPTTModel):  
   gruppo = models.ForeignKey(Gruppo, on_delete=models.CASCADE, related_name='contoCOCGE_gruppo')
   nome = models.CharField(max_length=2,default='')
   descrizione = models.CharField("Descrizione",max_length=50,default='')
   parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

   class MPTTMeta:
     order_insertion_by = ['nome']

   class Meta: 
      verbose_name = "Conto"
      verbose_name_plural = "Conti"

   def antenati(self):
      tmp=''
      if self.is_root_node():
        return  format_html(f'<b> {{}} - {{}} </b>', mark_safe(self.nome), mark_safe(self.descrizione))
      for i in self.get_ancestors():
        tmp += i.nome + '.'
      return tmp+self.nome+' - '+self.descrizione 

   antenati.allow_tags = True   

   def __str__(self):
      tmp=''
      if self.is_root_node():
        return  format_html(f'<b> {{}} - {{}} </b>', mark_safe(self.nome), mark_safe(self.descrizione))
      for i in self.get_ancestors():
        tmp += i.nome + '.'
      return tmp + self.nome 
  __str__.allow_tags = True

In the admin page then I try to overwrite get_queryset(), with the following definition:

#admin.py
class ContoCOGEAdmin (DjangoMpttAdmin):
def get_queryset(self, request):
    qs = super().get_queryset(request)
    if 'gruppo_utente' in request.session:
        return qs.filter(gruppo_id=int(request.session['gruppo_utente']))
    else:
        return qs

form = postForm ...
.... //other stuff

but the page in the browser always returns the same. This is the data table ContoCOGE:

data table ContoCOGE

If gruppo_utente = '3', the sixth row shouldn't be shown, but why:

browser result

debugging from vscodium, however, is ok:

debug

where qs.filter(gruppo_id=int(request.session['gruppo_utente'])) returns:

<TreeQuerySet [<ContoCOGE: <b> 01 - ATTIVO </b>>, <ContoCOGE: 01.10>, <ContoCOGE: <b> 50 - Passivo </b>>, <ContoCOGE: 50.51>, <ContoCOGE: 50.51.01>, <ContoCOGE: <b> 58 - TEMP2 </b>>]>

Thanks in advance

It seems that overriding get_queryset() with MPPTModel is not effective; according to the documentation, I solved it overriding the filter_tree_queryset() method to filter the queryset for the tree. The documentation should be updated, as the method takes 3 arguments, not 2

class ContoCOGEAdmin (DjangoMpttAdmin):

   form = postForm
   //[...]


   def filter_tree_queryset(self, queryset,request):
      qs = queryset.filter(gruppo_id=int(request.session['gruppo_utente']))
      num = len(qs)
      return qs
Back to Top