2013-12-07 23 views
18

だから、2つの列を追加してテーブルを移行しようとしています。 A startDateおよびendDateである。 Djangoにsouthを使用すると、これは単純な移行でなければなりません。他にもdateTimesを持つテーブルがたくさんありますが、何らかの理由でここに出てきて問題は出てきません。Django Southエラー:AttributeError: 'DateTimeField'オブジェクトに 'model'という属性がありません

スタックトレースが述べている:ここでは

AttributeError: 'DateTimeField' object has no attribute 'model' 

は私が移行していたモデルである:

# Keep track of who has applied for a Job 
class JobApply(models.Model): 
    job = models.ForeignKey(Jobs) 
    user = models.ForeignKey(User) 
    # Keep track of the Developer accepted to do the work 
    accepted_dev = models.IntegerField(null=False, blank=False, default=0) 
    # If 1 (True) the User has applied to this job 
    isApplied = models.BooleanField(default=0) 
    startDate = models.DateTimeField() 
    endDate = models.DateTimeField() 

startDateendDateを除くすべてのフィールドが既にDBに存在します。ですから、それらの列にデフォルト値を与えるために、私はすべての正方形を維持するために、ターミナルを通してdatetime.date.now()を使います。問題は、Southのschemamigrationはうまく動作しますが、実際の移行barfsは正常です。

誰かがエラーを見ることができれば、私の髪はそれを感謝します。 :P

EDIT:スタックトレースを含め :

Running migrations for insource: 
- Migrating forwards to 0004_auto__add_field_jobapply_startDate__add_field_jobapply_endDate. 
> insource:0004_auto__add_field_jobapply_startDate__add_field_jobapply_endDate 
Error in migration: insource:0004_auto__add_field_jobapply_startDate__add_field_jobapply_endDate 
Traceback (most recent call last): 
    File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 242, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/south/management/commands/migrate.py", line 111, in handle 
    ignore_ghosts = ignore_ghosts, 
    File "/usr/local/lib/python2.7/dist-packages/south/migration/__init__.py", line 220, in migrate_app 
    success = migrator.migrate_many(target, workplan, database) 
    File "/usr/local/lib/python2.7/dist-packages/south/migration/migrators.py", line 229, in migrate_many 
    result = migrator.__class__.migrate_many(migrator, target, migrations, database) 
    File "/usr/local/lib/python2.7/dist-packages/south/migration/migrators.py", line 304, in migrate_many 
    result = self.migrate(migration, database) 
    File "/usr/local/lib/python2.7/dist-packages/south/migration/migrators.py", line 129, in migrate 
    result = self.run(migration, database) 
    File "/usr/local/lib/python2.7/dist-packages/south/migration/migrators.py", line 113, in run 
    return self.run_migration(migration, database) 
    File "/usr/local/lib/python2.7/dist-packages/south/migration/migrators.py", line 83, in run_migration 
    migration_function() 
    File "/usr/local/lib/python2.7/dist-packages/south/migration/migrators.py", line 59, in <lambda> 
    return (lambda: direction(orm)) 
    File "/home/jared/Desktop/School/insource/insource/migrations/0004_auto__add_field_jobapply_startDate__add_field_jobapply_endDate.py", line 14, in forwards 
    keep_default=False) 
    File "/usr/local/lib/python2.7/dist-packages/south/db/generic.py", line 47, in _cache_clear 
    return func(self, table, *args, **opts) 
    File "/usr/local/lib/python2.7/dist-packages/south/db/generic.py", line 411, in add_column 
    sql = self.column_sql(table_name, name, field) 
    File "/usr/local/lib/python2.7/dist-packages/south/db/generic.py", line 706, in column_sql 
    default = field.get_db_prep_save(default, connection=self._get_connection()) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 350, in get_db_prep_save 
    prepared=False) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 911, in get_db_prep_value 
    value = self.get_prep_value(value) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 902, in get_prep_value 
    (self.model.__name__, self.name, value), 
AttributeError: 'DateTimeField' object has no attribute 'model' 

移行コード(それは少し長いですと、関連するコードを追加):

def forwards(self, orm): 
    # Adding field 'JobApply.startDate' 
    db.add_column(u'insource_jobapply', 'startDate', 
        self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2013, 12, 7, 0, 0)), 
        keep_default=False) 

    # Adding field 'JobApply.endDate' 
    db.add_column(u'insource_jobapply', 'endDate', 
        self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2013, 12, 7, 0, 0)), 
        keep_default=False) 


def backwards(self, orm): 
    # Deleting field 'JobApply.startDate' 
    db.delete_column(u'insource_jobapply', 'startDate') 

    # Deleting field 'JobApply.endDate' 
    db.delete_column(u'insource_jobapply', 'endDate') 


u'insource.jobapply': { 
    'Meta': {'object_name': 'JobApply'}, 
    'accepted_dev': ('django.db.models.fields.IntegerField', [], {'default': '0'}), 
    'endDate': ('django.db.models.fields.DateTimeField', [], {}), 
    u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 
    'isApplied': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 
    'job': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['insource.Jobs']"}), 
    'startDate': ('django.db.models.fields.DateTimeField', [], {}), 
    'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) 
}, 
+0

スタックトレース全体を教えてもらえますか?私は 'AttributeError'で期待通りに' .model'をどこにも見ません... – mgilson

+0

マイグレーションコードも共有できますか?私はそのような移行を数回使用し、彼らは円滑に働いた... –

+0

私の編集した質問を参照してください。 – jaredgilmore

答えて

30

私は私のバージョンをアップグレードする必要がありました〜0.8.4southpipを使用している場合、

sudo easy_install -U South 

または::その後

pip install South --upgrade 

予想通り、私の移行が働いていた、

は、次のコマンドを実行する必要がありました。

+1

完全性のために:これは0.8.3で修正されたようです:https://code.djangoproject.com/ticket/21312 – steps

関連する問題