-
Сущесвует ли какой-нибуть метод для опредления того, авторизирован ли пользователь в 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) -
if user.is_staff:
...
-
Это снова я, только залогиненный.
Судя по первому посту Ивана Сагалаева вот в этом топике http://softwaremaniacs.org/forum/django/975/ в модели нельзя получить текущего пользователя, значит не получится опеределить текущего пользователя user ? =( -
Ну как не получится: берете и передаете его туда.
Но то, что вы столкнулись с проблемой, уже повод задуматься. И правда ведь, может лучше эту логику не в менеджер модели пихать, а куда-то еще?
-
Я в джанго новичок, поэтому хотел сделать все по жёсткому - через модель =)
Но нарушать "философию" фрэймворка тоже не хочу.
Тогда спрошу так - как посоветуете сконструировать логику показа/скрытия статьи в зависимости от поля published(boolean), так, чтобы возможно было этим управлять через админку.
Т.е. Announce.objects.all() во фронтэнде выбирал все записи с published=True,
в то время как в админке эти записи не исчезали =) -
Ну, у модели может быть несколько менеджеров объектов, помимо стандартного objects. А админка дает возможность указать, какой queryset брать для списка объектов :)
-
Ладно, наверно надо дочитать джангобук.
-
Не, надо читать документацию. Там про все это написано.
-
Вобщем решил проблему. Напишу для тех, кто тоже столкнется.
Во первых читаем 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)
Теперь при обращении Games.published_objects.all() будут отбираться только опубликованные Games, в то время как админка работает по стандартному Games.objects.all()class Games(models.Model)
name=....
published=.....
objects = models.Manager()
published_objects = PublishedManager()
P.S.3. Не нашел, как у вас тут код обрамлять.
P.P.S.3. Спасибо, обрамил -
(code) ... (/code), только скобки квадратные.
P.S. Не нашел, как эскейпить bb-теги :) -
Только иногда (если показывать все объекты надо только в исключительных случаях) бывает лучше сделать наоборот:
class Games(models.Model) ... objects = PublishedManager() all_objects = models.Manager()А в админке:
class GameAdmin(admin.ModelAdmin): def queryset(self, request): return Game.all_objects.all() -
Я как раз думал на этот счет. И всё-таки мне кажется что objects = PublishedManager() - это хак =)
А так спасибо, учту и такой вариант.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.




