V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
shuizhengqi
V2EX  ›  Python

Django 怎么实现扩展 user 模块

  •  
  •   shuizhengqi · 2017-09-29 17:57:58 +08:00 · 4368 次点击
    这是一个创建于 2649 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位大佬,我最近是在边学边用 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 条附言  ·  2017-09-30 09:54:19 +08:00
    已经解决了,自己设置了一个 signal...删掉之后就成功了,谢各位大佬指点。👍
    20 条回复    2017-09-30 14:07:53 +08:00
    shuizhengqi
        1
    shuizhengqi  
    OP
       2017-09-29 17:58:46 +08:00
    查了,每次 auth_user 里面都有数据插入,但是跟 user 关联的 user_base 表里面却没有任何数据,我现在真的是被搞得头都大了。。。我在调试的时候看到 dept_id 是有值的,不知道为啥存的时候都提示 null
    shuizhengqi
        2
    shuizhengqi  
    OP
       2017-09-29 18:00:48 +08:00
    @shuizhengqi 手抖了。。。
    a87150
        4
    a87150  
       2017-09-29 18:08:49 +08:00
    没看懂,你不能直接继承 AbstractUser 吗
    shuizhengqi
        5
    shuizhengqi  
    OP
       2017-09-29 18:10:22 +08:00
    @a87150 我查到的大部分都是用 OneToOneField 做关联的,我额外存储的信息不需要做验证的,跟 profile 差不多
    yorks
        6
    yorks  
       2017-09-29 18:34:36 +08:00
    看看你的 User_base 是怎么 create 的? 怀疑你 create 的时候没有设置 dept_id 的值,然后 在 User_base 定义是必须的。
    yorks
        7
    yorks  
       2017-09-29 18:35:54 +08:00
    这些 extend profile 最好都设置成 blank=True 吧。。。
    wanghaoxi3000
        8
    wanghaoxi3000  
       2017-09-29 18:59:32 +08:00 via Android
    User_base create 了吗或者只是声明了没有调用 save() ?
    willhunger
        9
    willhunger  
       2017-09-29 19:09:00 +08:00
    dept_id 具体值的是什么呢?你在 create 的时候可以具体制定的
    linuxchild
        10
    linuxchild  
       2017-09-29 19:46:19 +08:00
    其实自己写一个不继承 User 也无所谓吧。。之前写的时候很少用到 OnetoOneField 这种(是不是我太 low 了
    linuxchild
        11
    linuxchild  
       2017-09-29 19:47:24 +08:00
    blank=True 加上吧,或者每次给一个默认值
    pynix
        12
    pynix  
       2017-09-29 20:09:20 +08:00
    酱狗一出天地灭,加入瑞思保平安。
    shuizhengqi
        13
    shuizhengqi  
    OP
       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
        14
    DevRoss  
       2017-09-29 22:19:45 +08:00
    你新建对象之后没有修改 dept_id 的值?
    在 save 之前加一行
    userxx.dept_id = dept_id
    ytmsdy
        15
    ytmsdy  
       2017-09-29 22:23:36 +08:00 via iPhone
    dept_id = models.IntegerField(default=0)
    yorks
        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 吧。
    ioREQcom
        17
    ioREQcom  
       2017-09-30 02:48:08 +08:00
    huhujin
        18
    huhujin  
       2017-09-30 09:24:32 +08:00
    User()是个哪个 model.肯定是 User_base.dept_id 没有赋值.
    shuizhengqi
        19
    shuizhengqi  
    OP
       2017-09-30 09:53:20 +08:00
    @ioREQcom 老哥,你发的这个不是文档啊。。。
    pynix
        20
    pynix  
       2017-09-30 14:07:53 +08:00
    @shuizhengqi 瑞思 == rails
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1080 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.