簡體   English   中英

Django寫入數據庫IntegrityError

[英]Django write to database, IntegrityError

我網頁的注冊視圖(如下)通過Django的auth模型User創建了一個新用戶,然后使用該新創建的用戶ID通過我自己的模型account.Users添加更多信息。 我的問題是,盡管我將新用戶的ID傳遞給第二個模型( account.Users中的ForeignKey列),但仍然收到一個錯誤,指出* user_id *列違反了非null約束:

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()

此錯誤的原因可能是什么?

除了將* cmodel.user_id *設置為等於userId之外 ,我還嘗試將其設置為等於第一步中創建的用戶對象,以及一個字符串和一個int(分別為'1'和1)。 我每次都會收到相同的錯誤。 我也嘗試過將字段更改為cmodel.user 我還可以從Django的錯誤頁面中看出,變量userId實際上確實包含一個值。

解決方案很簡單,盡管出乎意料。 我在這里寫下來,以防其他人遇到相同的問題:

除了上面顯示的模型的概述部分之外,我還嘗試使用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”字段為空。 實際上,這僅僅是對完全不同的內容的文件夾許可。 希望有一天能對某人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM