所以我试图通过向其添加两列来迁移表.A startDate
和endDate
.使用south
Django,这应该是一个简单的迁移.我还有大量其他带有dateTimes的表格,但由于某种原因,我在这里得到并发布,我没有看到它.
堆栈跟踪说明:
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()
DB中除了startDate
并且endDate
已经存在的所有字段.因此,为了给这些列提供默认值,我通过终端使用datetime.date.now()来保持一切正方形.问题是,南方的schemamigration
工作正常,但实际的迁移barfs.
如果有人能看到错误,我的头发会很感激.:P
编辑:包括Stacktrace:
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, inexecute_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 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']"}) },
jaredgilmore.. 30
我不得不将我的版本升级south
为django
版本0.8.4
.
必须运行以下命令:
sudo easy_install -U South
或者,如果使用pip
:
pip install South --upgrade
之后,我的迁移按预期工作.