Используя choices
параметр не будет использовать ПЕРЕЧИСЛИМЫЙ тип дб; это просто создаст VARCHAR или ЦЕЛОЕ ЧИСЛО, в зависимости от того, используете ли Вы choices
с CharField или IntegerField. Обычно это очень хорошо. Если для Вас важно, чтобы ПЕРЕЧИСЛИМЫЙ тип использовался на уровне базы данных, у Вас есть три опции:
С любой из этих опций, это была бы Ваша обязанность иметь дело с последствиями для мобильности перекрестной базы данных. В опции 2 Вы могли использовать database-backend-specific пользовательский SQL, чтобы гарантировать, что Ваш ALTER TABLE только выполняется на MySQL. В опции 3 Ваш db_type метод должен был бы проверить механизм базы данных и установить тип столбца дб на тип, который на самом деле существует в той базе данных.
ОБНОВЛЕНИЕ : Так как платформа миграций была добавлена в Django 1.7, опции 1 и 2 выше являются совершенно устаревшими. Опция 3 всегда была наилучшим вариантом так или иначе. Новая версия опций 1/2 включила бы сложную пользовательскую миграцию с помощью SeparateDatabaseAndState
- но действительно Вы хотите опцию 3.
Вот небольшой пример, который я сделал. Я звоню LS из своего класса-манекена. Протестировано с помощью rspec
require "rubygems"
require "spec"
class Dummy
def command_line
system("ls")
end
end
describe Dummy do
it "command_line should call ls" do
d = Dummy.new
d.should_receive("system").with("ls")
d.command_line
end
end