【问题标题】:error in migration thrown during django testsdjango 测试期间抛出的迁移错误
【发布时间】:2013-05-25 14:15:03
【问题描述】:

在我的 django 应用中,我添加了一个数据迁移(使用South)来添加一个用户作为项目的创建者

from south.db import db
from south.v2 import DataMigration
from django.db import models
...
class Migration(DataMigration):

    def forwards(self, orm):
        suser = orm['auth.User'].objects.filter(is_superuser=True)[0]
        for item in orm.MyItem.objects.all():
            item.creator = suser
            item.save()

当迁移运行时,这成功地为数据库中的每个MyItem 添加了一个创建者。但是,测试现在抛出一个错误

Creating test database for alias 'default'...
Error in migration: mypgm:0005_add_creator
..
File "/home/me/dev/python/django/mypgm/migrations/0005_add_creator.py", line 10, in forwards
    suser = orm['auth.User'].objects.filter(is_superuser=True)[0]
  File "/home/me/Django-1.4/django/db/models/query.py", line 207, in __getitem__
    return list(qs)[0]
IndexError: list index out of range

我查看了 query.py 的 src 代码,但不知道为什么会这样。我在 ubuntu lucid 上使用 Django1.4python 2.6.5

如果有人能理解为什么会发生这个错误,请告诉

【问题讨论】:

    标签: django testing django-south


    【解决方案1】:

    测试运行程序抱怨,因为在测试数据库中找不到具有超级用户权限的用户。很可能您没有通过南创建用户。您可以使用 UserManager 的 get_or_create 方法:

    def forwards(self, orm):
        suser, created = orm['auth.User'].objects.get_or_create(...)
    

    【讨论】:

    • 我已经在 initial_data 中添加了一个超级用户。这还不够吗?
    • 错误信息很清楚,你确定数据被加载了吗?
    猜你喜欢
    • 1970-01-01
    • 2016-07-04
    • 2015-03-02
    • 1970-01-01
    • 2015-01-28
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    相关资源
    最近更新 更多