Southのschemamigrationでエラー

schemamigrationで以下のエラーになりました。

 ! Cannot freeze field 'apps.person.shirt_size'
 ! (this field has class books.models.ShirtSizeField)

 ! South cannot introspect some fields; this is probably because they are custom
 ! fields. If they worked in 0.6 or below, this is because we have removed the
 ! models parser (it often broke things).
 ! To fix this, read http://south.aeracode.org/wiki/MyFieldsDontWork


どうやらモデルにカスタムフィールドを使ったのが原因らしい

apps.models

class ShirtSizeField(models.CharField):
    def get_choices(self, include_blank=True, blank_choice=BLANK_CHOICE_DASH):
        return super(ShirtSizeField, self).get_choices(include_blank, [("", u"選択してください")])


class Person(models.Model):
    SHIRT_SIZES = (
        ('S', 'Small'),
        ('M', 'Medium'),
        ('L', 'Large'),
    )
    name = models.CharField(max_length=60)
    shirt_size = ShirtSizeField(max_length=2, choices=SHIRT_SIZES)

エラーメッセージに含まれているURLのページにhow do i fix it?という節があって直し方が書いてあるので参考にして以下を追加

apps.models.に以下を追加

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^appss\.models\.ShirtSizeField"])


これでschemamigrateできるようになった。



参考 : MyFieldsDontWork – South