这是我的模型:
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
的书,稍作修改。
正如错误所述,您正在通过模型对象访问管理器,而不是模型类,因此您可能会执行以下操作:
News().published.all()
而应该是:
News.published.all()