各位大佬,我最近是在边学边用 django,在开发注册模块的时候遇到了问题,一天都没解决。。 django 默认的注册是只保存 username 跟 email 的,我需要更多的信息,然后新建了一个 model
class User_base(models.Model):
user = models.OneToOneField(User)
username = models.CharField(max_length=50)
email = models.CharField(max_length=50)
nick_name = models.CharField(max_length=50)
cn_name = models.CharField(max_length=50)
en_name = models.CharField(max_length=50)
dept_id = models.IntegerField()
job_title_id = models.CharField(max_length=50)
empid = models.IntegerField()
supervisor_empid = models.IntegerField()
然后有个表单里面设置了 dept_id 等列不为空,然后就是 view.py 里面处理接受过来的数据
userxx = User()
userxx.username = username
userxx.set_password(password)
userxx.email = emailadd
userxx.save()
但是每次到 userxx.save 的时候都会报错 (1048, "Column 'dept_id' cannot be null")
,我去表里查了一下,每次 auth_user 里面都有数据插入,但是跟 user 关联的 user_base 表里面却没有任何数据,我现在真的是被搞得头都大了。。。我在调试的时候看到 dept_id 是有值的,不知道为啥存的时候都提示 null
1
shuizhengqi OP 查了,每次 auth_user 里面都有数据插入,但是跟 user 关联的 user_base 表里面却没有任何数据,我现在真的是被搞得头都大了。。。我在调试的时候看到 dept_id 是有值的,不知道为啥存的时候都提示 null
|
2
shuizhengqi OP @shuizhengqi 手抖了。。。
|
3
ohhe 2017-09-29 18:07:18 +08:00
|
4
a87150 2017-09-29 18:08:49 +08:00
没看懂,你不能直接继承 AbstractUser 吗
|
5
shuizhengqi OP @a87150 我查到的大部分都是用 OneToOneField 做关联的,我额外存储的信息不需要做验证的,跟 profile 差不多
|
6
yorks 2017-09-29 18:34:36 +08:00
看看你的 User_base 是怎么 create 的? 怀疑你 create 的时候没有设置 dept_id 的值,然后 在 User_base 定义是必须的。
|
7
yorks 2017-09-29 18:35:54 +08:00
这些 extend profile 最好都设置成 blank=True 吧。。。
|
8
wanghaoxi3000 2017-09-29 18:59:32 +08:00 via Android
User_base create 了吗或者只是声明了没有调用 save() ?
|
9
willhunger 2017-09-29 19:09:00 +08:00
dept_id 具体值的是什么呢?你在 create 的时候可以具体制定的
|
10
linuxchild 2017-09-29 19:46:19 +08:00
其实自己写一个不继承 User 也无所谓吧。。之前写的时候很少用到 OnetoOneField 这种(是不是我太 low 了
|
11
linuxchild 2017-09-29 19:47:24 +08:00
blank=True 加上吧,或者每次给一个默认值
|
12
pynix 2017-09-29 20:09:20 +08:00
酱狗一出天地灭,加入瑞思保平安。
|
13
shuizhengqi OP @linuxchild 主要是刚上手 django,想着用自带的认证会比较方便一下
@wanghaoxi3000 @willhunger 有调用 save(),就是在 save 的时候报错的,我还没建 user_base 对象,因为 user 在保存的时候一直会报这个错误,我也不知道是因为什么原因,在一点点排查。我之前建 user_base 的时候,穿进去的 form 是有 dept_id 的值的 @yorks @pynix 看到你说瑞思,还以为是我学校之前的睿思呢.. |
14
DevRoss 2017-09-29 22:19:45 +08:00
你新建对象之后没有修改 dept_id 的值?
在 save 之前加一行 userxx.dept_id = dept_id |
15
ytmsdy 2017-09-29 22:23:36 +08:00 via iPhone
dept_id = models.IntegerField(default=0)
|
16
yorks 2017-09-29 22:58:44 +08:00
user.save() 的时候是不会主动创建 User_base 的, 所以绝对不会报 dept_id 的问题,
所以你还是检查一下你的 User_base 是怎么 create 的。 我怀疑你是用了 signal 去 create 而不指定 dept_id 这个非 blank=True 的字段。 你不要 AT 我了 上面好几个人喊你检查 User_base 的 create, 如果实在不想检查你就直接设置 blank=True 吧。 |
17
ioREQcom 2017-09-30 02:48:08 +08:00
|
18
huhujin 2017-09-30 09:24:32 +08:00
User()是个哪个 model.肯定是 User_base.dept_id 没有赋值.
|
19
shuizhengqi OP @ioREQcom 老哥,你发的这个不是文档啊。。。
|
20
pynix 2017-09-30 14:07:53 +08:00
@shuizhengqi 瑞思 == rails
|