Django South - превращение поля null=True в поле null=False

Мой вопрос в том, как лучше всего превратить поле null=True в поле null=False с помощью Django South. В частности, я работаю с ForeignKey.


person orokusaki    schedule 21.01.2011    source источник
comment
Знаете ли вы, каким будет новое значение по умолчанию для столбца внешнего ключа после null=False? Скорее, будет ли он одинаковым для всех или потребуется какая-то особая обработка, чтобы определить, каким он будет? Будет ли дефолт? Какую базу данных вы используете?   -  person mkelley33    schedule 21.01.2011


Ответы (2)


Сначала вы должны написать миграцию данных: http://south.aeracode.org/docs/tutorial/part3.html, а затем выполните миграцию схемы.

person diegueus9    schedule 21.01.2011

Если вы хотите превратить обнуляемый ForeignKey в необнуляемый, то это может быть проблематично, если у вас есть строки с NULL для этого поля (столбца). В таком случае вам нужно либо удалить, либо исправить их - возможно, с помощью пользовательской миграции данных, например diegueus9, упомянутой в другом ответе.

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

$ ./manage.py schemamigration myapp remove_null_from_fkey --auto
(...)
$ ./manage.py migrate myapp
person Tomasz Zieliński    schedule 21.01.2011