我的网页的注册视图(下方)通过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 确实包含一个值。
答案 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”字段为空。它实际上只是一个完全不同的文件夹权限。希望有一天能帮助某人。