gpt4 book ai didi

python - 为什么在 Django 中重写 Model.save() 函数不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:54 25 4
gpt4 key购买 nike

我是 SO 和 Python/Django 的新手,所以请多多包涵。

在我基于 http://www.djangoproject.com/ 上的教程的通用博客应用程序中,我试图通过在帖子标题上使用 slugify() 方法将帖子保存到数据库时为帖子创建 slug。这是 posts.models.py:

from django.db import models
from django.template.defaultfilters import slugify
import datetime

class Post( models.Model ):

def __unicode__(self):
return self.title

title = models.CharField( max_length = 200 )
slug = models.SlugField( editable = False )
body = models.TextField()
pub_date = models.DateTimeField('date published')

def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify( self.title )
super( Post, self ).save( *args, **kwargs )

不幸的是,这会在尝试启动服务器时抛出以下异常:

File "/Users/modocache/Programming/Django/blog/posts/models.py", line 24, in Post
super( Post, self ).save( *args, **kwargs )
NameError: name 'Post' is not defined

我对抛出 NameError 的原因感到困惑。我以为我错误地使用了 super() 方法,但这有效,尽管它看起来像我在上面尝试的同一件事:

class Foo( object ):
def say_spam( self ):
print "Spam!"

class Bar( Foo ):
def say_spam( self ):
print "Brought to you by:"
super( Bar, self ).say_spam()
print "Eggs!"

b = Bar()
b.say_spam()

那么,如果这可行,为什么上面的 Django 代码片段不会失败?考虑到 djangoproject.com 的文档说这应该有效,这尤其令人费解:

# http://docs.djangoproject.com/en/dev/topics/db/models/#overriding-model-methods

class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()

def save(self, *args, **kwargs):
do_something()
super(Blog, self).save(*args, **kwargs) # Call the "real" save() method.
do_something_else()

提前感谢您提供的所有帮助,我将不胜感激!

最佳答案

缓存,

你用的是什么版本的django?你在那里列出的应该工作,我在我自己的许多模型中使用相同的逻辑,并且工作正常。

根据此页面:http://fosshelp.blogspot.com/2010/12/django-override-save-method-two-ways.html

您应该能够将代码更改为如下所示(如下),它会做同样的事情但不会引用 Post 模型。

 def save(self, *args, **kwargs):
if not self.id:
self.slug = slugify( self.title )
models.Model.save(self, *args, **kwargs ) # <-- notice the self

还有一点,使用“if not self.id:”通常更好的做法是使用“if not self.pk:”。查看这些相关链接。

Django queries - id vs pk

http://docs.djangoproject.com/en/dev/ref/models/instances/#the-pk-property

这有什么帮助。

关于python - 为什么在 Django 中重写 Model.save() 函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451724/

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