我是SO和Python/Django的新手,請耐心等待。爲什麼Django中的Model.save()函數的重寫不能工作?
在我的基於教程http://www.djangoproject.com/的通用博客應用中,我試圖通過在帖子標題中使用slugify()方法將帖子保存到數據庫時爲帖子創建slu gs。這裏是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異常。我以爲我用的是超()方法錯了,但這個作品,儘管它似乎像我試圖上面同樣的事情:
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()
感謝提前任何及所有的幫助,我會很感激!
謝謝,我現在有我最好的網址! 根據你的建議,我將super()更改爲models.Model.save(),現在一切正常。不過,我的模型和你的模型之間明顯的不一致。我使用的是Django 1.3: In [5]:import django In [6]:django.get_version() Out [6]:'1.3' 感謝所有的酷鏈接和pk上的提示!這是一個很大的幫助。 – modocache 2011-03-27 21:16:20