Задать вопрос
@blazer05

Как сделать публикацию новости посредством чекбокса?

Нужно при создании новости сделать опубликована она или снята с публикации. Я впринципе половину сделал, добавил в модель
published = models.BooleanField(verbose_name='Опубликован')

В админке вывел в list_display = ['published'], но как не знаю как написать обработчик?
Сейчас новости все выводятся даже если новость снята с публикации. Подскажите как вьюху написать?
  • Вопрос задан
  • 413 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
winordie
@winordie
Лучшая документация -- исходники
class NewsView(ListView):
  model = News
  def get_queryset(self):
    return super().get_queryset().filter(published=True)

В чем проблема то?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
#models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from .managers import NewsQuerySet

class Product(models.Model):
    is_published = models.BooleanField(
        default=False,
        verbose_name=u'Показывать на сайте',
    )
    title = models.CharField(
        max_length=200,
        verbose_name=u'Название',
    )

    objects = NewsQuerySet.as_manager()
    
    class Meta:
        verbose_name = u'Новость'
        verbose_name_plural = u'Новости'

    def __unicode__(self):
        return self.title

Я обычно делаю так. Создаю менеджер, в нём фильтр на публикацию.
#managers.py
# -*- coding: utf-8 -*-
from django.db import models

class NewsQuerySet(models.QuerySet):
    def published(self):
        return self.filter(is_published=True)

Вызываю это так
#views.py
# -*- coding: utf-8 -*-
from django.views.generic import ListView, DetailView

from .models import News


class NewsList(ListView):
    queryset = News.objects.published()


class NewsDetail(DetailView):
    queryset = News.objects.published()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы