1

これは、新しい環境をセットアップしようとしている South の問題です。すべてのアプリで移行を実行すると、次のエラーが発生します。

Traceback (most recent call last):
  File "/Users/emilepetrone/Sites/tindie2/lib/python2.7/site-packages/south/migration/migrators.py", line 175, in _run_migration
    migration_function()
  File "/Users/emilepetrone/Sites/tindie2/lib/python2.7/site-packages/south/migration/migrators.py", line 57, in <lambda>
    return (lambda: direction(orm))
  File "/Users/emilepetrone/Sites/tindie2/tindie/tindie/apps/seller/migrations/0001_initial.py", line 26, in forwards
    ('comments', self.gf('mezzanine.generic.fields.CommentsField')(object_id_field='object_pk', to=orm['generic.ThreadedComment'])),
  File "/Users/emilepetrone/Sites/tindie2/lib/python2.7/site-packages/south/db/generic.py", line 44, in _cache_clear
    return func(self, table, *args, **opts)
  File "/Users/emilepetrone/Sites/tindie2/lib/python2.7/site-packages/south/db/generic.py", line 343, in create_table
    for field_name, field in fields
  File "/Users/emilepetrone/Sites/tindie2/lib/python2.7/site-packages/south/db/generic.py", line 643, in column_sql
    field = self._field_sanity(field)
  File "/Users/emilepetrone/Sites/tindie2/lib/python2.7/site-packages/south/db/mysql.py", line 263, in _field_sanity
    type = self._db_type_for_alter_column(field).lower()
AttributeError: 'NoneType' object has no attribute 'lower'

これは、私の最後の schemamigration か、models.py 内の何かの問題のようです。

私のモデルでは、フィールドは次のようになります (移行間で変更されていません)。

from mezzanine.generic.fields import CommentsField

class MyClass(models.Model):
    comments = CommentsField(verbose_name=_("Comments"))

移行から:

    'generic.threadedcomment': {
        'Meta': {'ordering': "('submit_date',)", 'object_name': 'ThreadedComment', '_ormbases': ['comments.Comment']},
        'by_author': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
        'comment_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['comments.Comment']", 'unique': 'True', 'primary_key': 'True'}),
        'replied_to': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'null': 'True', 'to': "orm['generic.ThreadedComment']"})
    },

このフィールドは移行間で変更されず、メザニンも変更されていないため、少し混乱しています。あなたのアイデアを前もってありがとう。

4

1 に答える 1

0

私が見る限り、問題は Mezzazine のCommentsFieldextendsGenericRelationとreturn です。これGenericRelation.db_type()NoneDjango のシンタックス シュガーであり、スキーマにフィールドの列表現がないためです。ただし、South はまだALTER TABLESQL ステートメントを生成しようとしており、効果的に呼び出すことNone.lower()で列の型を変更します。これが、例外が発生する理由です。

これは明らかなバグのようで、私の理解が完全にずれている可能性がありますが、私が見たところ、South の生成された移行スクリプトを手動で編集し、新しい列として追加されている一般的な関係フィールドへの参照を削除できるはずです。

于 2012-08-13T10:44:27.423 に答える