Вы должны сделать метод на пользовательском менеджере для этого:
from django.db import models
class MyManager(models.Manager):
def all(self, session=None):
if session is None:
return self.all()
else:
return self.filter(.....)
class MyModel(models.Model):
# fields go here
objects = MyManager()
Хотя это, вероятно, не рекомендуемый подход, поскольку он меняет поведение all()
, что может привести к неожиданным последствиям для других частей вашего приложения!
В качестве альтернативы вы можете либо добавить НОВЫЙ метод в менеджер для этой цели, либо выполнить дополнительную фильтрацию в представлении:
# code in the view
qs = MyModel.objects.all()
if session....:
qs = qs.filter(...)
Но вам всегда нужно будет передать необходимые данные в ваш метод фильтрации! Учтите, что метод также может быть вызван из местоположения, которое не имеет доступа к данным запроса / сеанса (например, оболочки), поэтому хорошая архитектура требует этого!