Python AttributeError - 'Category' 对象没有属性 'product_set'

Posted

技术标签:

【中文标题】Python AttributeError - \'Category\' 对象没有属性 \'product_set\'【英文标题】:Python AttributeError - 'Category' object has no attribute 'product_set'Python AttributeError - 'Category' 对象没有属性 'product_set' 【发布时间】:2013-03-20 13:38:13 【问题描述】:

昨天,我的电子商务目录的 show_category 视图功能齐全。例如,导航到 domain.com/category/necklaces 将调用 show_category 视图并显示我在项链类别中的所有产品。这是通过两个表、产品和类别以及它们关联的“通过”表来完成的。

我一直在使用 syncdb,但我必须添加一个新的 ManyToManyField,所以 Django South 参与其中,我安装了它,重新创建了数据库,使用 django south 来管理我的迁移,设置并添加了所有内容我的类别和产品回到了 django admin,一切都很顺利。我在 SQL Workbench 中检查了数据库本身,一切看起来都很棒——完美重现了我昨晚的内容,但现在使用的是 Django South。

但后来我导航到 domain.com/category/necklaces,我希望看到我的类别页面列出了我的一个测试项链产品。相反,我得到了这个:

AttributeError at /category/necklaces/
'Category' object has no attribute 'product_set'

错误发生在这里,在我的 catalog.views.py 中:

def show_category(request, 
                  category_slug, 
                  template_name="catalog/category.html"):
    c = get_object_or_404(Category, 
                          slug=category_slug)
    products = c.product_set.all()

但问题是,自昨晚以来,这一切都没有改变。我检查了数据库,是的,产品存在,是的,“通过”表正确地将产品连接到这个类别。

任何想法我应该去哪里看?我假设错误是在数据库中的某个地方,因为我基本上没有触及当时工作的代码,但数据库看起来如此原始,很难说。任何和所有的帮助表示赞赏。在此期间,我会在自己周围闲逛。

【问题讨论】:

如果您在外键引用中使用了related_name_set 将不起作用。可以分享一下你的模型吗? 我愿意分享,但你解决了问题。果然,related_name 潜入了模型。我将不得不与另一位“从昨晚起就没有碰过它……我不认为……”的开发人员谈谈。谢谢 karthikr。您是否想将其添加为答案以便我接受,或者这不是您处理解决问题的 cmets 的方式? 【参考方案1】:

添加评论作为答案以供将来参考:

如果您在外键引用中使用了related_name,则_set 将不再起作用,因为django 提供_set 作为默认相关名称,并且自定义相关名称优先

一些关于related_namehere用法的文档

【讨论】:

我投票赞成增加阅读 - 这有助于我理解我认为我完全理解但有一些误解的问题。

以上是关于Python AttributeError - 'Category' 对象没有属性 'product_set'的主要内容,如果未能解决你的问题,请参考以下文章

Python:AttributeError:'str'对象没有属性'datetime'

Python类继承:AttributeError:'[SubClass]'对象没有属性'xxx'

为啥python中会出现这个AttributeError?

Python 错误:AttributeError:“模块”对象没有属性“heappush”

Python-“ AttributeError:'str'对象没有属性'Tc'(Tc是参数之一)[关闭]

AttributeError:模块'tensorflow'在更新后没有属性'python'错误