4

我正在使用 Django 1.10.3,在迁移步骤中,当我使用 RunPython() 调用自定义管理器方法时遇到错误。任何想法我做错了什么?

错误消息是: AttributeError: 'Manager' object has no attribute 'current_event'

我的模特和经理:

class EventManager(models.Manager):
    use_in_migrations = True

    def current_event(self):
        try:
            the_event = self.filter(
                            event_date__gte=date.today()
                        ).earliest(
                            field_name='event_date'
                        )
        except ObjectDoesNotExist:
            the_event = None

        return the_event

class Event(models.Model):
    event_date = models.DateField()
    objects = EventManager()

我的迁移:

def update_ratings_event(apps, schema_editor):
    Rating = apps.get_model('league', 'Rating')
    Event = apps.get_model('league', 'Event')

    recent_event = Event.objects.current_event()

    for a_rating in Rating.objects.all():
        a_rating.event = recent_event
        a_rating.save()

class Migration(migrations.Migration):

    dependencies = [
        ('league', '0009_auto_20170401_1106'),
    ]

    operations = [
        migrations.RunPython(update_ratings_event),
    ]

这是回溯:

  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/core/management/__init__.py", line 359, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/core/management/base.py", line 294, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/core/management/base.py", line 345, in execute
    output = self.handle(*args, **options)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/core/management/commands/migrate.py", line 204, in handle
    fake_initial=fake_initial,
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/db/migrations/executor.py", line 115, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/db/migrations/migration.py", line 129, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/home/mriley/.virtualenvs/League/lib/python3.5/site-packages/django/db/migrations/operations/special.py", line 189, in database_forwards
    self.code(from_state.apps, schema_editor)
  File "/home/mriley/Development/League/website/league/migrations/0010_auto_20170404_1645.py", line 12, in update_ratings_event
    recent_event = Event.objects.current_event()
AttributeError: 'Manager' object has no attribute 'current_event'
4

0 回答 0