Django写入数据库,IntegrityError

时间:2013-07-25 21:07:40

标签: django postgresql ubuntu model django-south

我的网页的注册视图(下方)通过Django的auth模型用户创建一个新用户,然后使用新创建的用户ID通过我自己的模型添加更多信息, account.Users 。我的问题是,虽然我将新用户的ID传递给第二个模型( account.Users 中的ForeignKey列),但我仍然收到列* user_id *违反非空约束的错误:

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 之外,我还尝试将其设置为等于第一步中创建的 user 对象,以及string和int(分别为'1'和1)。我每次都得到同样的错误。我也尝试将字段更改为 cmodel.user 。我还可以从Django的错误页面告诉变量 userId 确实包含一个值。

1 个答案:

答案 0 :(得分: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”字段为空。它实际上只是一个完全不同的文件夹权限。希望有一天能帮助某人。