Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Фильтр по пользовательскому полю в менеджере модели [RSS Feed]

#1 Дек. 22, 2013 21:10:20

zillion
Зарегистрирован: 2012-08-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтр по пользовательскому полю в менеджере модели

Есть модель данных и менеджер к ней. В менеджере несколько методов которые достают данные с определенными условиями. Эти данные и юзеры привязан к определенному городу. В менеджере необходимо учитывать город текущего пользователя или если пользователь не авторизирован то показывать со всех городов.

Может кто сталкивался с таким или подскажет как лучше реализовать?

Офлайн

#2 Дек. 23, 2013 04:36:22

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Фильтр по пользовательскому полю в менеджере модели

Слишком общее описание проблемы. Вообще не понятно, что конкретно у Вас не получается и какие связи между моделями. Покажите код и конкретизируйте вопрос.



Офлайн

#3 Дек. 23, 2013 23:01:11

zillion
Зарегистрирован: 2012-08-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Фильтр по пользовательскому полю в менеджере модели

Модель:

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')

Отредактировано zillion (Дек. 23, 2013 23:01:41)

Офлайн

  • Начало
  • » Django
  • » Фильтр по пользовательскому полю в менеджере модели[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version