Модель:
class Item(models.Model):
user = models.ForeignKey(get_user_model())
title = models.CharField(max_length=45)
city = models.ForeignKey(City, default=0, related_name='items')
Менеджер:
class ItemManager(models.Manager):
def upcoming(self):
start_time = timezone.now()
return self.filter(start_time__gte=start_time).order_by('start_time')
В менеджере несколько методов с разными условиями и в них также нужно добавить фильтр по городу для авторизированных пользователей, то есть в менеджере нужно получить объект user. Первое что пришло в голову это просто передавать вторым параметром user.
class ItemManager(models.Manager):
def upcoming(self, user):
start_time = timezone.now()
if user.is_authenticated():
return self.filter(city=user.city).filter(start_time__gte=start_time).order_by('start_time')
return self.filter(start_time__gte=start_time).order_by('start_time')