Публикация и снятие с публикации новостей.
Захотелось сделать возможность, чтоб при написании поста можно было его не сразу публиковать а пока не отметишь этот пост на публикацию и также снять пост с публикации.
Переходим к делу.
Что нам нужно будет сделать в этом случае?
1. Дописать в нашу основную модель одну строчку кода
2. Прописать некий код в файле admin.py т.е. вывести в админку некоторые поля
3. В функции, которая получает все посты из базы сделать некоторые изменения.
В model.py добавляем
published = models.BooleanField(default=False, verbose_name='Опубликован') # Чек бокс - опубликован!
В admin.py выводим это поле в классе вашей модели.
list_display = ['title', 'published', 'category']
тут же в этом файле пишем код
# Функции фильтрации для массовой публикации/снятия с публикации новостей. def all_post(modeladmin, reguest, queryset): for qs in queryset: print qs.title def complete_post(modeladmin, reguest, queryset): queryset.update(published=True) complete_post.short_description = 'Опубликовать новости' def incomplete_post(modeladmin, reguest, queryset): queryset.update(published=False) incomplete_post.short_description = 'Снять с публикации'
И добавляем в класс вашей модели эту строку
actions = [all_post, complete_post, incomplete_post]
Как примерно должно получиться смотрите на скриншоте.
В поле fields я тоже вывел published просто на скрине не вместилось!
В обработчике views.py делаем одно не большое изменение в функции, которая получается все новости all() меняем на filter(published=True) в моем случае это выглядит так
all_foo = BlogPost.objects.filter(published=True)
Что мы имеем в итоге?
Теперь в админке при добавлении поста есть чек бокс, который по умолчанию не публикуют созданую новость пока не отметишь его.
Так же я вывел на главную страницу админки этот чек бокс, если его отметить, то вницу можно выбрать кроме удалить и опубликовать или снять с публикации.
Вроде все!
Помогло вот это видео
Ваши комментарии
Комментарии могут оставлять только зарегистрированые пользователи!