1. Чибисов Геннадий

    29.07.2010

    0 ↑
    0 ↓
    Сущесвует ли какой-нибуть метод для опредления того, авторизирован ли пользователь в backend или frontend?

    Пишу для того, чтобы в мэнеджере моделей показывать для пользователей из админки скрытые поля, а для юзеров с фронтэнда - нет.

    Привожу, примерно как я эту функцию вижу =)

    class PublishedManager(models.Manager):
    if not in_admin:
    def get_query_set(self):
    return super(PublishedManager, self).get_query_set().filter(published=True)
  2. Alexander Koval

    29.07.2010

    0 ↑
    0 ↓
    if user.is_staff:
    ...
  3. web-chib

    29.07.2010

    0 ↑
    0 ↓
    Это снова я, только залогиненный.
    Судя по первому посту Ивана Сагалаева вот в этом топике http://softwaremaniacs.org/forum/django/975/ в модели нельзя получить текущего пользователя, значит не получится опеределить текущего пользователя user ? =(
  4. Ну как не получится: берете и передаете его туда.

    Но то, что вы столкнулись с проблемой, уже повод задуматься. И правда ведь, может лучше эту логику не в менеджер модели пихать, а куда-то еще?

  5. web-chib

    29.07.2010

    0 ↑
    0 ↓
    Я в джанго новичок, поэтому хотел сделать все по жёсткому - через модель =)
    Но нарушать "философию" фрэймворка тоже не хочу.
    Тогда спрошу так - как посоветуете сконструировать логику показа/скрытия статьи в зависимости от поля published(boolean), так, чтобы возможно было этим управлять через админку.

    Т.е. Announce.objects.all() во фронтэнде выбирал все записи с published=True,
    в то время как в админке эти записи не исчезали =)
  6. Ну, у модели может быть несколько менеджеров объектов, помимо стандартного objects. А админка дает возможность указать, какой queryset брать для списка объектов :)

  7. web-chib

    29.07.2010

    0 ↑
    0 ↓
    Ладно, наверно надо дочитать джангобук.
  8. Не, надо читать документацию. Там про все это написано.

  9. web-chib

    29.07.2010

    0 ↑
    0 ↓
    Вобщем решил проблему. Напишу для тех, кто тоже столкнется.
    Во первых читаем http://softwaremaniacs.org/blog/2006/07/20/custom-managers/

    Описание модели.

    Менеджер выглядит так
    class PublishedManager(models.Manager):
    def get_query_set(self):
    return super(PublishedManager, self).get_query_set().filter(published=True)
    Сам класс
    class Games(models.Model)
    name=....
    published=.....
    objects = models.Manager()
    published_objects = PublishedManager()
    Теперь при обращении Games.published_objects.all() будут отбираться только опубликованные Games, в то время как админка работает по стандартному Games.objects.all()

    P.S.3. Не нашел, как у вас тут код обрамлять.

    P.P.S.3. Спасибо, обрамил
  10. Fulcrum

    29.07.2010

    0 ↑
    0 ↓
    (code) ... (/code), только скобки квадратные.

    P.S. Не нашел, как эскейпить bb-теги :)
  11. Только иногда (если показывать все объекты надо только в исключительных случаях) бывает лучше сделать наоборот:

    class Games(models.Model)
        ...
        objects = PublishedManager()
        all_objects = models.Manager()
    

    А в админке:

    class GameAdmin(admin.ModelAdmin):
        def queryset(self, request):
            return Game.all_objects.all()
    
  12. web-chib

    29.07.2010

    0 ↑
    0 ↓
    Я как раз думал на этот счет. И всё-таки мне кажется что objects = PublishedManager() - это хак =)
    А так спасибо, учту и такой вариант.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.