
各位大佬,我最近是在边学边用 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 Sep 29, 2017 |
4 a87150 Sep 29, 2017 没看懂,你不能直接继承 AbstractUser 吗 |
5 shuizhengqi OP @a87150 我查到的大部分都是用 OneToOneField 做关联的,我额外存储的信息不需要做验证的,跟 profile 差不多 |
6 yorks Sep 29, 2017 看看你的 User_base 是怎么 create 的? 怀疑你 create 的时候没有设置 dept_id 的值,然后 在 User_base 定义是必须的。 |
7 yorks Sep 29, 2017 这些 extend profile 最好都设置成 blank=True 吧。。。 |
8 wanghaoxi3000 Sep 29, 2017 via Android User_base create 了吗或者只是声明了没有调用 save() ? |
9 newbie269 Sep 29, 2017 dept_id 具体值的是什么呢?你在 create 的时候可以具体制定的 |
10 linuxchild Sep 29, 2017 其实自己写一个不继承 User 也无所谓吧。。之前写的时候很少用到 OnetoOneField 这种(是不是我太 low 了 |
11 linuxchild Sep 29, 2017 blank=True 加上吧,或者每次给一个默认值 |
12 pynix Sep 29, 2017 酱狗一出天地灭,加入瑞思保平安。 |
13 shuizhengqi OP @linuxchild 主要是刚上手 django,想着用自带的认证会比较方便一下 @wanghaoxi3000 @willhunger 有调用 save(),就是在 save 的时候报错的,我还没建 user_base 对象,因为 user 在保存的时候一直会报这个错误,我也不知道是因为什么原因,在一点点排查。我之前建 user_base 的时候,穿进去的 form 是有 dept_id 的值的 @yorks @pynix 看到你说瑞思,还以为是我学校之前的睿思呢.. |
14 DevRoss Sep 29, 2017 你新建对象之后没有修改 dept_id 的值? 在 save 之前加一行 userxx.dept_id = dept_id |
15 ytmsdy Sep 29, 2017 via iPhone dept_id = models.IntegerField(default=0) |
16 yorks Sep 29, 2017 user.save() 的时候是不会主动创建 User_base 的, 所以绝对不会报 dept_id 的问题, 所以你还是检查一下你的 User_base 是怎么 create 的。 我怀疑你是用了 signal 去 create 而不指定 dept_id 这个非 blank=True 的字段。 你不要 AT 我了 上面好几个人喊你检查 User_base 的 create, 如果实在不想检查你就直接设置 blank=True 吧。 |
17 ioREQcom Sep 30, 2017 |
18 huhujin Sep 30, 2017 User()是个哪个 model.肯定是 User_base.dept_id 没有赋值. |
19 shuizhengqi OP @ioREQcom 老哥,你发的这个不是文档啊。。。 |
20 pynix Sep 30, 2017 @shuizhengqi 瑞思 == rails |