gpt4 book ai didi

python - 无法通过模型实例访问管理器

转载 作者:行者123 更新时间:2023-11-28 19:33:19 24 4
gpt4 key购买 nike

我试图在另一个模型中获取模型对象实例,但我引发了这个错误:

Manager isn't accessible via topic instance

这是我的模型:

class forum(models.Model):
# Some attributs

class topic(models.Model):
# Some attributs

class post(models.Model):
# Some attributs

def delete(self):
forum = self.topic.forum
super(post, self).delete()
forum.topic_count = topic.objects.filter(forum = forum).count()

这是我的观点:

def test(request, post_id):
post = topic.objects.get(id = int(topic_id))
post.delete()

然后我得到:

post.delete()
forum.topic_count = topic.objects.filter(forum = forum).count()
Manager isn't accessible via topic instances

最佳答案

有问题的错误是在您尝试访问 Manager 时引起的通过模型实例的模型。您使用了小写 类名。这使得很难说错误是否是由访问 Manager 的实例引起的或不。由于可能导致此错误的其他情况未知,因此我假设您以某种方式混淆了 topic。变量,以便您最终指向 topic 的一个实例模型而不是类。

这一行是罪魁祸首:

forum.topic_count = topic.objects.filter(forum = forum).count()
# ^^^^^

你必须使用:

forum.topic_count = Topic.objects.filter(forum = forum).count()
# ^^^^^
# Model, not instance.

出了什么问题? objectsManager在类级别可用,而不是实例。查看documentation for retrieving objects了解详情。货币报价:

Managers are accessible only via model classes, rather than from model instances, to enforce a separation between "table-level" operations and "record-level" operations.

(强调)

更新

请参阅下面@Daniel 的评论。对类名使用标题大小写是个好主意(不,你必须 :P)。例如Topic而不是 topic .无论您指的是实例还是类,您的类名都会引起一些混淆。自 Manager isn't accessible via <model> instances非常具体,我可以提供解决方案。错误可能并不总是那么不言自明。

关于python - 无法通过模型实例访问管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com