2013-07-25 28 views
0

我的網頁的註冊視圖(下)創建通過Django的身份驗證模型的新用戶,用戶,然後使用該新創建的用戶的ID,通過我自己的模型,帳戶添加更多的信息。用戶。我的問題是,雖然我傳遞新用戶的ID到第二模型(account.Users的ForeignKey的列),我不斷收到該列* USER_ID *違反了非空約束的錯誤:Django的寫入數據庫,IntegrityError

IntegrityError at /account/signup/ 
null value in column "user_id" violates not-null constraint 

這裏是我的模型的相關部分:

class Users(models.Model): 
    user = models.ForeignKey(User, unique=True, null=True, blank=True) 
    firstname = models.CharField(max_length=100, blank=True, default='') 

而且我的觀點的相關部分:

def signup(request): 
    if request.method == 'POST' and request.POST['firstname']: 
    user = User.objects.create_user(request.POST['username'], request.POST['email'], request.POST['password']) 
    userId = user.id 
    form = UsersForm(request.POST, request.FILES) 
    if form.is_valid(): 
     cmodel = form.save() 
     cmodel.user_id = userId 
     cmodel.firstname = request.POST['firstname'] 
     cmodel.save() 

什麼可以b e此錯誤的原因?

除了設定* cmodel.user_id *等於用戶id,我自己也嘗試將其設置等於用戶在第一步驟中創建的「1」 1對象,以及一個字符串和INT(和, 分別)。我每次都得到相同的錯誤。我也嘗試將字段更改爲cmodel.user。我也可以從Django的錯誤頁面中看出變量userId確實包含一個值。

+0

另一個相關信息:我也重啓了apache和postgres。 – jball037

+0

您是否在Postrgres中檢查過表的模式,也許您是在沒有'null = True'的情況下首先創建它的,然後再修復它,但從未實際更新模式。 –

+0

它一直有null = True – jball037

回答

1

該解決方案很簡單,儘管意外。我寫在這裏,以防其他人遇到同樣的問題:

除了上面顯示的模型的摘要部分,我還試圖用PIL (Python Imaging Library)保存圖像。並稱,該模型的相關部分如上圖所示:

class Users(models.Model): 
    user = models.ForeignKey(User, unique=True, null=True, blank=True) 
    firstname = models.CharField(max_length=100, blank=True, default='') 
    profile_pic = models.ImageField(upload_to='profilepics', max_length=300, default='') 

這種「upload_to」文件夾,「profilepics」,曾訪問權限「755」,但是當我通過運行「$搭配chmod改變了他們 - R 777 profilepics「在終端中,一切正常!奇怪的是,錯誤消息是歸咎於我的「user_id」字段爲空。這實際上只是一個完全不同的文件夾許可。希望有一天能幫助某個人。