Django South Error: AttributeError: объект DateTimeField не имеет атрибута 'model'


Поэтому я пытаюсь перенести таблицу, добавив в нее два столбца. A startDate и an endDate. Используя south для Django, это должно быть простой миграцией. У меня есть множество других таблиц с датами в них, но по какой-то причине я получаю и выпускаю здесь, и я не вижу этого.

Трассировка стека гласит:

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()

Все поля, кроме startDate и endDate, уже существуют в БД. Итак, чтобы дать этим столбцам дефолт значения, которые я использую datetime.дата.теперь () через терминал, чтобы держать все в порядке. Проблема в том, что Южный schemamigration работает просто отлично, но фактическая миграция рвется.

Если кто-нибудь заметит ошибку, мои волосы оценят это. :P

EDIT : Включая 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, 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']"})
},
1 18

1 ответ:

Мне пришлось обновить свою версию south для django до версии 0.8.4.

Пришлось выполнить следующую команду:

sudo easy_install -U South

Или, если используется pip:

pip install South --upgrade
После этого моя миграция сработала, как и ожидалось.