Django: 调用自己的模型方法时出现AttributeError错误

3

我最近在我的模型“新闻”中添加了一个新的方法:

def slug(self):
    return slugify(self.title)

然而,我似乎无法从任何地方调用它。假设我有一个名为n的News对象。尝试调用时,请参考:
n.slug()

我经常会遇到这样的错误:

AttributeError: 'News' object has no attribute 'slug'

我是 Django 和 Python 的新手,我相信这只是我的一个愚蠢错误。另外,我尝试在添加了该方法后重新启动开发服务器并同步数据库,但两者都没有改变什么。请注意,我之前已经成功使用过类似的模型方法 :S
编辑: 以下是模型:
from django.template.defaultfilters import slugify

class News(models.Model):
    title = models.CharField(max_length=100)
    [...]
    def slug(self):
        return slugify(self.title)

这里是我调用该方法的一些示例代码。我首先尝试在模板中调用它,但没有成功。然后我更改了我的视图,使其只返回slug,但错误仍然存在。当我在shell中尝试时也是如此。
from fbki.models import News

def news_detail(request, slug, news_id):
    news = News.objects.get(id = news_id)
    return HttpResponse(news.slug())

3
你能否发布一下那个slug的模型以及你调用slug()函数的代码? - Timmy O'Mahony
我看不到你实例化新闻的地方。你需要执行news = News.objects.get(pk=news_id) - Mikael
抱歉,我忘记了那一行 :S 已经在10秒后编辑过了。 - cpury
嗯,我认为一切看起来都没问题。也许你应该尝试清除你的.pyc文件:find . -name "*.pyc" -exec rm -r {} \;(或手动删除News模型的models.pyc文件)。 - Timmy O'Mahony
可能存在缩进错误吗?也许您在某个地方使用了制表符而不是空格,从而导致Python未将"slug"方法视为类的一部分? - Daniel Roseman
显示剩余2条评论
2个回答

0

我遇到了类似的错误。

我认为问题在于您的模型与数据库中实际架构之间存在不一致。

运行manage.py sql myapp并验证其内容是否与sql> show schema(等等)中的内容匹配。

如果它们不匹配,则必须使用SQL客户端删除旧表,以便您可以重新运行manage.py syncdb使它们再次匹配。

一旦架构存在,您的方法应该可以正常工作。


0

没有错误。请检查您所使用的类。

  from fbki.models import News

看起来你的项目里有两份副本,并且修改了其他类。你可以通过将你的类 News 重命名为 News1 来进行检查。如果你仍然遇到同样的错误,那么我的判断是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接