Создание менеджера модели в Django 3.0

Moroz

Новичок
Пользователь
Апр 9, 2020
4
1
3
Всем привет.
Обучаюсь django. Учусь по книге в которой описывается вер. 2.0.
Застрял на таком вопросе.
Создал менеджер для получения статьи.

Python:
class PublishedManager(models.Manager):
    def get_queryset(self):
        return super(PublishedManager, self).get_queryset().filter(status='published')

и добавил этот менеджер в модель
Python:
class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now())
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    objects = models.Manager()  # The default manager.
   published = PublishedManager()  # Our custom manager.

Теперь создаю обработчик для списка статей
И если использовать такую запись

Python:
def post_list(request):
    posts = Post.[B]published[/B].all()
    return render(request, 'blog/post/list.html', {'posts': posts})

то список не выводиться.
а если использую менеджер по умолчанию то все работает
Python:
def post_list(request):
    posts = Post.[B]objects.[/B]all()
    return render(request, 'blog/post/list.html', {'posts': posts})

Подскажите может есть какие-то принципиальные отличия с менеджарами в версиях 3 и 2? Или может где-то допускаю ошибку.
до этого самостоятельно получалось найти информацию, когда что-то не получалось.
P.S.
За ранее благодарен! и прошу без нападок т.к. новичок в этом деле)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Наверно у вас нет постов со статусом published в базе. Поэтому и выводить нечего. Зайдите в админку и посмотрите статус у постов published или draft. У вас по умолчанию для новых постов draft.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
posts = Post.published.all()
здесь указан не статус publihsed, а имя переменной, к которой присвоен ранее описанный класс PublishedManager.
А что делает этот класс? Выбирает из базы посты со статусом published: filter(status='published') и потом в переменную posts попадают только такие посты: posts = Post.published.all()
 

Moroz

Новичок
Пользователь
Апр 9, 2020
4
1
3
Наверно у вас нет постов со статусом published в базе. Поэтому и выводить нечего. Зайдите в админку и посмотрите статус у постов published или draft. У вас по умолчанию для новых постов draft.

posts = Post.published.all()
здесь указан не статус publihsed, а имя переменной, к которой присвоен ранее описанный класс PublishedManager.
 

Moroz

Новичок
Пользователь
Апр 9, 2020
4
1
3
А что делает этот класс? Выбирает из базы посты со статусом published: filter(status='published') и потом в переменную posts попадают только такие посты: posts = Post.published.all()
Спасибо. Как обычно затупил)
Поменял в админке статус.
Страница отображает теперь как надо.
 
  • Ха-ха!
Реакции: Student

Форум IT Специалистов