2011-12-28 55 views
2

另一個新手問題,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': '',      
    } 
} 
+0

這裏沒有必要對交易做任何事情。你的原始代碼是什麼? – 2011-12-28 19:43:21

+0

嘗試舊方法時會出現什麼錯誤,以及新方法? – 2011-12-28 19:43:44

+0

在調試模式下,當我到達返回行時,page.id爲None。舊方法和新方法之間沒有區別,因爲page.id都不是。 – cirik 2011-12-28 20:12:20

回答

4

刪除t他從您的模型類id字段。

如果您沒有指定主鍵,Django會自動插入名爲id的自動字段,因此您不需要它。

因爲你已經明確說過你的id字段是一個整數主鍵,Django希望你自己管理它。這是一個IntField,因爲你聲明,而不是AutoField,所以它不會自動分配任何值。

+0

謝謝,我會嘗試但有另一個問題。如果我刪除了id字段,我如何使用blogpost對象的主鍵重定向? – cirik 2011-12-28 21:10:30

+0

運行良好,只是從模型中刪除了ID。 – cirik 2011-12-28 21:57:34

+2

如果你的模型定義中沒有包含主鍵字段,Django會添加一個。它將被稱爲'id',並且將是一個自動遞增整數字段。 – 2011-12-28 22:46:50

0

使用這個,而不是手動調用save()

頁= BlogPost.objects.create(標題= PAGE_NAME,身體=內容, author = request.user,category = postCategory)

+0

創建也沒有工作。與save()相同,它會添加到數據庫中,但不會立即生效。 – cirik 2011-12-28 20:52:18

相關問題