2017-04-02 74 views
0

我以爲自己躲過/解決了這個錯誤,但現在堅持我db.py代碼:。的web2py:IntegrityError(「NOT NULL約束失敗:post.message

Post = db.define_table('post', 
         Field('message', 'text', requires=IS_NOT_EMPTY(), notnull=False), 
         Field('answers', 'text', requires=IS_NOT_EMPTY(), notnull=False), 
         auth.signature 
     ) 
Post.is_active.readable=False 
Post.is_active.writeable=False 

控制器:

@ auth.requires_login()

def index(): 
    db.post.answers.writable=False 
    db.post.answers.readable=False 
    form = SQLFORM(post, formstyle='divs') 
    if form.process().accepted: 
     pass 
    messages = db(post).select(orderby=~post.created_on) 
    .......code 
    #after several codes in now need to post a message to answers field, WITHOUT using a form in the view page 
    db.post.insert(answers=report) 

筆者認爲:

{{for msg in messages:}} 
code 
{{=msg.message}} 
{{report from answers field}} 

我的問題是,我不斷收到錯誤:IntegrityError(「NOT NULL約束失敗:post.message

我怎麼解決這個問題? 親切的問候

+0

你最初是否有'notnull = True',現在你不再需要這個限制了? – Anthony

+0

是的,我確實擁有它 – wakamdr

+0

http://www.mail-archive.com/[email protected]/msg12879.html .....這篇文章訣竅......默認='' – wakamdr

回答

0

如果數據庫表最初是notnull=True創建的,後來模式轉變到notnull=False不會有任何效果,去掉了NOT NULL約束需要一個外部工具(DAL不能刪除這樣的限制)。

正如您在評論中所建議的,您可以改爲將字段的默認值設置爲類似於空字符串的內容,但如果確實需要允許空值,則應該使用數據庫管理工具來刪除來自數據庫模式的約束。

相關問題