IntegrityError -userprofile.u_id 不能为NULL,django用户注册

Posted

技术标签:

【中文标题】IntegrityError -userprofile.u_id 不能为NULL,django用户注册【英文标题】:IntegrityError -userprofile.u_id may not be NULL, django user registration 【发布时间】:2012-12-03 22:06:51 【问题描述】:

我正在尝试使用 Django UserProfile 功能注册用户。我有一个扩展的 UserProfile 模型。我的文件如下所示。我收到“accounts_userprofile.u_id 可能不是 NULL”,我在保存表单时尝试使用 'commit=false',但它不起作用。我的父模型将字段设置为 null = True,blank = True。我已经删除了表格并添加了几次,但没有任何效果。请帮助。提前致谢

我的模型如下:

class UserBase(models.Model):
class Meta:
    abstract = True
    u_id = models.IntegerField(null = True,blank = True)
    email = models.CharField(max_length=200, null = True,blank = True)
    website=models.CharField(max_length=200, null = True, blank = True)
    age = models.IntegerField(blank = True, null = True)
    location = models.CharField(max_length= 200, null=True, blank = True)
    username = models.CharField(max_length = 100, null = True, blank = True)

UserProfile 模型如下:

class UserProfile(UserBase):
user = models.ForeignKey(User, null= True, blank = True, unique = True)

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 
def __unicode__(self):
    return "User Profile for: " + self.user.username

def create_user_profile(sender, **kw): 用户 = kw['实例'] 如果kw ['创建']: up = UserProfile(user=user)

    up.save()

post_save.connect(create_user_profile, sender = User, dispatch_uid ="user_create_profile")

我的注册视图如下:

def register(request, template_name="registration/register.html"): 如果 request.method == 'POST':

  postdata = request.POST.copy()
  form = UserCreationForm(postdata)
  if form.is_valid(): 

      un = postdata.get('username','')
      pw = postdata.get('password1','')

      from django.contrib.auth import login, authenticate

      new_user = authenticate(username=un, password=pw)
      form.save()
      #if new_user and new_user.is_active:
          #login(request, new_user)
          #url = urlresolvers.reverse('my_account')
          #return HttpResponseRedirect(url)

其他: 表单 = UserCreationForm() page_title = '用户注册' 返回 render_to_response(template_name, locals(), context_instance=RequestContext(request))>

【问题讨论】:

你能发布回溯吗?谢谢 感谢 Armyth,它成功了 【参考方案1】:

来自 Django 文档:

https://docs.djangoproject.com/en/1.4/ref/models/fields/

Field.unique

如果为 True,则此字段在整个表中必须是唯一的。

这是在数据库级别和模型验证中强制执行的。如果你 尝试在唯一字段中保存具有重复值的模型, django.db.IntegrityError 将由模型的 save() 方法引发。

此选项对除 ManyToManyField 和 文件字段。

您告诉 UserProfiles UserProfiles.u_id 是唯一的,它不是(空白/空)。所以你得到了错误。您可能需要考虑将 u_id 更改为 AutoField 主键。然后使用 models.ForeignKey('UserBase') 连接它们

【讨论】:

以上是关于IntegrityError -userprofile.u_id 不能为NULL,django用户注册的主要内容,如果未能解决你的问题,请参考以下文章

IntegrityError:删除时违反外键

IntegrityError 中缺少表名(Django ORM)

无法捕获 SQLAlchemy IntegrityError

IntegrityError:(1062,“密钥 2 的重复条目 '3-add_author'”)

IntegrityError:(1062,键的重复条目)

Django写入数据库,IntegrityError