另一個新手問題,Django的 - 不保存到數據庫立即
權後,我保存到數據庫中的一個項目,我試圖訪問 其主鍵,把它的重定向頁面。但我無法完成。 我試着手動處理交易,正如在document中所解釋的那樣。
難道這是因爲使用管理模式?
我得到這個錯誤:
invalid literal for int() with base 10: 'None'
我改變了返回的行這ID轉換成字符串
return HttpResponseRedirect("/blog/page/"+str(page.id)+"/")
這裏是代碼段。
@transaction.commit_manually
def new_post_save(request):
.
.
.
page.save()
sid = transaction.savepoint()
transaction.savepoint_commit(sid)
return HttpResponseRedirect("/blog/page/"+page.id+"/")
原來這裏是視圖的休息和模型
def new_post_save(request):
page_name = request.POST["page_name"]
content = request.POST["content"]
postCategory = request.POST["cat"]
page = BlogPost(title = page_name,body = content, author = request.user, category = postCategory)
page.save()
return HttpResponseRedirect("/blog/page/"+page.id+"/")
模型
class BlogPost(models.Model):
id = models.IntegerField(primary_key=True)
author = models.ForeignKey(User)
title = models.CharField(max_length=128)
body = models.TextField()
category = models.CharField(max_length=10, default='other')
def __unicode__(self):
return self.title
這裏base.py我想我並沒有覆蓋保存功能。
def save(self, force_insert=False, force_update=False, using=None):
"""
Saves the current instance. Override this in a subclass if you want to
control the saving process.
The 'force_insert' and 'force_update' parameters can be used to insist
that the "save" must be an SQL insert or update (or equivalent for
non-SQL backends), respectively. Normally, they should not be set.
"""
if force_insert and force_update:
raise ValueError("Cannot force both insert and updating in model saving.")
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
save.alters_data = True
在settings.py由數據庫
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'blog.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
這裏沒有必要對交易做任何事情。你的原始代碼是什麼? – 2011-12-28 19:43:21
嘗試舊方法時會出現什麼錯誤,以及新方法? – 2011-12-28 19:43:44
在調試模式下,當我到達返回行時,page.id爲None。舊方法和新方法之間沒有區別,因爲page.id都不是。 – cirik 2011-12-28 20:12:20