- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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:”。查看这些相关链接。
http://docs.djangoproject.com/en/dev/ref/models/instances/#the-pk-property
这有什么帮助。
关于python - 为什么在 Django 中重写 Model.save() 函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451724/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!