无法通过模型实例访问自定义管理器

问题描述 投票:0回答:1

这是我的模型:

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(status=News.Status.PUBLISHED)


class News(models.Model):
    class Status(models.TextChoices):
        DRAFT = 'DF', 'پیش‌نویس'
        PUBLISHED = 'PB', 'منتشر شده'

    user = settings.AUTH_USER_MODEL

    image = FileBrowseField(
        'تصویر خبر', max_length=255, directory='news/', extensions=['.png', '.jpg']
    )
    title = models.TextField('عنوان خبر')
    slug = models.SlugField(
        'نامک',
        max_length=255,
        unique=True,
        help_text=('نامک آدرس لینک خبر در مرورگر است و باید یکتا باشد.'),
        allow_unicode=True,
    )
    author = models.ForeignKey(
        user, on_delete=models.CASCADE, related_name='news', verbose_name='نویسنده'
    )

    body = RichTextUploadingField('متن خبر', config_name='extended')
    publish = models.DateTimeField('تاریخ انتشار', default=timezone.now)
    created = models.DateTimeField('تاریخ ایجاد', auto_now_add=True)
    updated = models.DateTimeField('بروزرسانی', auto_now=True)
    status = models.CharField(
        max_length=2, choices=Status.choices, default=Status.DRAFT
    )

    objects = models.Manager()
    published = PublishedManager()

    class Meta:
        ordering = ['-publish']
        indexes = [models.Index(fields=['-publish'])]
        verbose_name = 'اخبار'
        verbose_name_plural = 'اخبار'

    def __str__(self):
        return self.title

但是我收到“AttributeError:无法通过新闻实例访问管理器。您的意思是:‘发布’吗?”

我读过有关此问题的其他帖子。它们都不适用于这里吗?

上面的代码实际上来自一本叫做

Django 4 by Example
的书,稍作修改。

django django-models
1个回答
0
投票

正如错误所述,您正在通过模型对象访问管理器,而不是模型类,因此您可能会执行以下操作:

News().published.all()

而应该是:

News.published.all()
© www.soinside.com 2019 - 2024. All rights reserved.