V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

关于 Django Model 中,如何设置字段的默认值,并作用在表里?

  •  
  •   piaochen · 37 天前 · 731 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。
    django,在 model 中建立一个 State 字段,默认值为‘ 1 ’,
    class test(models.Model):
    State = models.CharField( maxlength=1, default='1')
    同步到数据库后,发现表 test 的 State 字段并没有默认值。
    查了一下,说这里 default 属性是应用在新建对象的时候的。在建表中,并不起作用。
    那么我现在想在表中设置默认值,在 django 怎么做?(当然可以直接修改数据库,但是这样不好,而且 default 太多的话,会带来很多问题)
    12 回复  |  直到 2017-12-17 11:07:16 +08:00
        1
    qq976739120   37 天前
    不是很懂你的具体需求,新添加一条记录的时候,你不赋值,就默认一个 1,表里设置默认值什么意思
        2
    robinlovemaggie   37 天前
    貌似走 model 是不行,要手动执行 raw sql。详见: https://stackoverflow.com/questions/31986507/django-default-value-in-database-not-just-orm
        3
    yearliny   37 天前 via Android
    观点同一楼,你一个空表,数据没有,怎么可能有默认值。当你创建一个数据,不给这个数值赋值,自然会出现 1 了。

    你这种想法,就和腾讯给没有未注册 QQ 号的 QQ 号已经填充好了个人资料一样,其他数据已经就位,就差被人注册了。而腾讯即使有设定的默认值,也只有一个人创建了 QQ 号时才能一起被设定到一条数据中。
        4
    chengxiao   37 天前
    是要给老的数据为空的数据增加一个默认值么?
    '''python
    b = test.objects.all()
    for x in b:
    x.State = default

    '''
        5
    chengxiao   37 天前
    是要给老的数据为空的数据增加一个默认值么?
    '''
    b = test.objects.all()
    for x in b:
    x.State = default
    x.save()
    '''
        6
    vZexc0m   37 天前
    好像数据库并不能设置默认值
        7
    Hstar   37 天前
    因为不是所有数据库的所有字段都支持设置默认值,所以在 django-orm 里 default 是由逻辑实现的。
    一定要设,就是自己改生成的 migration 文件,用 sql 语句添加 default,然后你还要考虑是否会产生逻辑冲突。
        8
    ifoolish   37 天前
    你如果真的要让 Django 建表的时候给字段加上默认值,只能修改 Django 建表的代码,文件大概是在 site-packages/django/db/backends/creation.py ,参考 https://stackoverflow.com/questions/6153482/django-models-default-value-for-column
        10
    dhq   35 天前 via iPhone
    是不是说你在查看表结构的时候,default,没有你表里设置的那个值
        11
    piaochen   35 天前
    @dhq 是的,在数据库中看表结构,没有 default 的值
        12
    dhq   34 天前
    这个是它特性,这个默认值不是写在表结构里,而是说你在使用 model 实例化一个对象保存的时候,djadjango 自己帮你设置一个这样的值,达到可以设置默认值的效果
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1748 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 60ms · UTC 10:58 · PVG 18:58 · LAX 02:58 · JFK 05:58
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1