【问题标题】:When I define a custom manager .. Error:Manager isn't accessible via Post instances当我定义自定义管理器时..错误:无法通过 Post 实例访问管理器
【发布时间】:2021-06-19 12:23:44
【问题描述】:

我定义了一个自定义管理器继承模型。经理放入我的模型“帖子”。 该错误表示您无法通过实例调用管理器,但我没有通过实例调用它,当我删除自定义管理器时它可以正常工作。

models.py:

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

class Post(models.Model):
    STATUS_CHOICES = [
        ('draft','Draft'), ('published','Published'),
        ]
    id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    published = models.DateTimeField(default=timezone.now)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10,choices=STATUS_CHOICES,default='Published')
    author = models.ForeignKey(CustomUser,on_delete=models.CASCADE)
    body = models.TextField()
    objects = models.Manager()
    published = PublishedManager()
    

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("detail", kwargs={"slug":self.slug,"id": self.id})

views.py:

class PostListView(ListView):
    model = Post
    template_name = 'blog/index.html'
    context_object_name='posts'

Error image

【问题讨论】:

    标签: python django django-managers


    【解决方案1】:

    我认为您不能拥有与模型字段名称相同的经理。尝试将其重命名为 published_objects

    当您尝试访问 post.published(一个字段)但 Django 认为您想要访问管理器时会发生错误,因此会出现错误。

    【讨论】:

    • 哇,谢谢! models.py 的变化:publishedposts = PubmishedManager()
    • 很高兴它成功了。如果它有帮助,请不要忘记接受并支持答案。 @RupeshChaulagain
    • 哦,抱歉,我是 stackoverflow 的新手,还没有足够的票数来支持其他人的答案。
    • 但是您仍然应该能够接受您问题的正确答案
    猜你喜欢
    • 2023-03-30
    • 2021-10-08
    • 2011-07-29
    • 2011-04-21
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多