Публикация и снятие с публикации новостей.

    blazer |   15.04.2016 |   13:26:26 |   Django |

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

Переходим к делу.

 

 

 

Что нам нужно будет сделать в этом случае?

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)

Что мы имеем в итоге?

Теперь в админке при добавлении поста есть чек бокс, который по умолчанию не публикуют созданую новость пока не отметишь его.

Так же я вывел на главную страницу админки этот чек бокс, если его отметить, то вницу можно выбрать кроме удалить и опубликовать или снять с публикации.

Вроде все!

Помогло вот это видео

Ваши комментарии

Комментарии могут оставлять только зарегистрированые пользователи!

Disqus - комментарии

blog comments powered by Disqus