Переопределение queryset в Django Admin без эффектов

Извините, если я повторяюсь в широко обсуждаемой теме, но я не могу понять, где ошибка, поскольку debug возвращает правильный результат, а страница в браузере - нет. Вкратце, я реализую приложение, которое является многопользовательским и многопользовательским, с использованием модуля django-organizations. Каждая модель, идентифицирующая определенные ресурсы, имеет поле 'gruppo', Foreign Key для конкретного арендатора. Кроме того, сессия содержит используемый арендатор('gruppo_utente'), чтобы позволить сменить одного арендатора на другого, просто изменив данные, хранящиеся в сессии.

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

Это модель:

//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

На странице администратора я пытаюсь перезаписать get_queryset(), используя следующее определение:

#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

но страница в браузере всегда возвращает одно и то же. Это таблица данных ContoCOGE:

data table ContoCOGE

Если gruppo_utente = '3', шестой ряд не должен отображаться, но почему:

browser result

Отладка из vscodium, однако, проходит нормально:

debug

где qs.filter(gruppo_id=int(request.session['gruppo_utente'])) возвращает:

<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>>]>

Заранее спасибо

Похоже, что переопределение get_queryset() в MPPTModel неэффективно; согласно документации, я решил эту проблему переопределением метода filter_tree_queryset() для фильтрации кверисета для дерева. Документацию следует обновить, так как метод принимает 3 аргумента, а не 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
Вернуться на верх