2015-03-04 3 views
1

Я использую Django 1.7 с MySQL.Django BooleanField default for mysql

У меня есть существующая модель, к которой я хочу добавить BooleanField. Я хочу, чтобы в поле по умолчанию было значение true. Кажется, достаточно просто? Поэтому я создаю мое поле следующим образом:

class MyModel(models.Model): 
    my_field = models.BooleanField(default=True) 

Тогда я бег makemigrations и я получаю следующее миграции генерироваться:

operations = [ 
    migrations.AddField(
     model_name='mymodel', 
     name='myfield', 
     field=models.BooleanField(default=True), 
     preserve_default=True, 
    ), 
] 

кажется законным, однако, когда я применяю миграцию поле, создаваемым в делает мою база данных не имеет значения по умолчанию, это выглядит следующим образом:

my_field tinyint(1) NOT NULL,

Теперь, когда я применяю миграции existin g имеет поле, установленное в 1, но я хочу, чтобы миграция создала поле, которое по умолчанию равно true, или 1. Что мне здесь не хватает? Может ли кто-нибудь пролить свет на то, что я делаю неправильно? Любой совет будет оценен, спасибо много!

+0

Что происходит, когда вы создаете новую запись в MyModel и сохраняете ее? Устанавливает ли my_field значение True? –

+0

@joelgoldstick - да, однако природа базы кода, с которой я работаю, не всегда использует ORM (мы переходим к Django, но есть еще устаревший код), поэтому я хочу, чтобы значение по умолчанию было установлено на db level – TheMethod

+0

Итак, похоже, что django делает правильные вещи, но унаследованный код добавлен новые записи, которые не являются стандартными. Извините, я не могу думать об этом. Может быть, запустить задание cron, которое обновляет новые записи из вашего старого кода? –

ответ

3

Django никогда не устанавливает значение по умолчанию на уровне базы данных. Если вы хотите поддержать значение по умолчанию в устаревшем коде, вы можете добавить операцию RunSQL к своей миграции, которая добавляет значение по умолчанию в столбец базы данных.

Смежные вопросы