Django 怎么实现扩展 user 模块

2017-09-29 17:57:58 +08:00
 shuizhengqi

各位大佬,我最近是在边学边用 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

4332 次点击
所在节点    Python
20 条回复
shuizhengqi
2017-09-29 17:58:46 +08:00
查了,每次 auth_user 里面都有数据插入,但是跟 user 关联的 user_base 表里面却没有任何数据,我现在真的是被搞得头都大了。。。我在调试的时候看到 dept_id 是有值的,不知道为啥存的时候都提示 null
shuizhengqi
2017-09-29 18:00:48 +08:00
@shuizhengqi 手抖了。。。
ohhe
2017-09-29 18:07:18 +08:00
a87150
2017-09-29 18:08:49 +08:00
没看懂,你不能直接继承 AbstractUser 吗
shuizhengqi
2017-09-29 18:10:22 +08:00
@a87150 我查到的大部分都是用 OneToOneField 做关联的,我额外存储的信息不需要做验证的,跟 profile 差不多
yorks
2017-09-29 18:34:36 +08:00
看看你的 User_base 是怎么 create 的? 怀疑你 create 的时候没有设置 dept_id 的值,然后 在 User_base 定义是必须的。
yorks
2017-09-29 18:35:54 +08:00
这些 extend profile 最好都设置成 blank=True 吧。。。
wanghaoxi3000
2017-09-29 18:59:32 +08:00
User_base create 了吗或者只是声明了没有调用 save() ?
willhunger
2017-09-29 19:09:00 +08:00
dept_id 具体值的是什么呢?你在 create 的时候可以具体制定的
linuxchild
2017-09-29 19:46:19 +08:00
其实自己写一个不继承 User 也无所谓吧。。之前写的时候很少用到 OnetoOneField 这种(是不是我太 low 了
linuxchild
2017-09-29 19:47:24 +08:00
blank=True 加上吧,或者每次给一个默认值
pynix
2017-09-29 20:09:20 +08:00
酱狗一出天地灭,加入瑞思保平安。
shuizhengqi
2017-09-29 21:34:47 +08:00
@linuxchild 主要是刚上手 django,想着用自带的认证会比较方便一下

@wanghaoxi3000
@willhunger 有调用 save(),就是在 save 的时候报错的,我还没建 user_base 对象,因为 user 在保存的时候一直会报这个错误,我也不知道是因为什么原因,在一点点排查。我之前建 user_base 的时候,穿进去的 form 是有 dept_id 的值的
@yorks
@pynix 看到你说瑞思,还以为是我学校之前的睿思呢..
DevRoss
2017-09-29 22:19:45 +08:00
你新建对象之后没有修改 dept_id 的值?
在 save 之前加一行
userxx.dept_id = dept_id
ytmsdy
2017-09-29 22:23:36 +08:00
dept_id = models.IntegerField(default=0)
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 吧。
ioREQcom
2017-09-30 02:48:08 +08:00
huhujin
2017-09-30 09:24:32 +08:00
User()是个哪个 model.肯定是 User_base.dept_id 没有赋值.
shuizhengqi
2017-09-30 09:53:20 +08:00
@ioREQcom 老哥,你发的这个不是文档啊。。。
pynix
2017-09-30 14:07:53 +08:00
@shuizhengqi 瑞思 == rails

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/394663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX