Django models: default value for column

后端 未结 3 432
忘掉有多难
忘掉有多难 2020-12-10 01:35

I have following Django model code:

status = models.PositiveIntegerField(default = 0b000)
comments_allowed = models.BooleanField(default = True)         


        
3条回答
  •  隐瞒了意图╮
    2020-12-10 02:40

    The only permanent solution is to patch the Django source, specifically db/backends/creation.py:

    Find:

    if f.primary_key:
        field_output.append(style.SQL_KEYWORD('PRIMARY KEY'))
    elif f.unique:
        field_output.append(style.SQL_KEYWORD('UNIQUE'))
    

    After add:

    if(f.default != models.fields.NOT_PROVIDED):
        field_output.append(style.SQL_KEYWORD('DEFAULT ' + str(f.default)))
    

    (Source: http://www.supermind.org/blog/671/django-not-setting-default-column-value-in-mysql)

    Alternatively (and preferably), if you're using South, you can just execute some additional SQL after the db.create_table in your migration:

    MySQL:

    db.execute("ALTER TABLE yourapp_yourmodel MODIFY status int Default '4'")
    

    Postgres:

    db.execute("ALTER TABLE yourapp_yourmodel ALTER COLUMN status SET DEFAULT 4")
    

提交回复
热议问题