Python 无法使用南迁移将django.contrib.auth.models.User分配给文件

Python 无法使用南迁移将django.contrib.auth.models.User分配给文件,python,django,django-south,Python,Django,Django South,对于我的django1.4应用程序,我正在尝试使用south进行数据迁移 我有一个MyCategory模型,需要为其添加一个名为creator的字段,该字段是django.contrib.auth.models.User 我修改了类并添加了字段 from django.contrib.auth.models import User class MyCategory(models.Model): name=models.CharField(unique=True,max_length=50

对于我的django1.4应用程序,我正在尝试使用south进行数据迁移

我有一个
MyCategory
模型,需要为其添加一个名为
creator
的字段,该字段是django.contrib.auth.models.User

我修改了类并添加了字段

from django.contrib.auth.models import User
class MyCategory(models.Model):
    name=models.CharField(unique=True,max_length=50)
    description=models.TextField(blank=True)
    creator = models.ForeignKey(User,null=True)#added
    slug=models.SlugField(editable=False)
我运行了python manage.py模式迁移myapp--auto

哪个输出
+在myapp.MyCategory上添加了字段创建者
并创建了一个文件
0003\u auto\u add\u field\u mycategory\u creator.py

然后我希望所有的旧记录都有webapp的超级用户作为创建者,所以我尝试了数据迁移

我运行了
python manage.py数据迁移myapp add\u creator

这将输出一个文件add_creator.py,我在其中实现了如下所示的forwards方法。(后来为了调试目的添加了一个print stmt)

然后我运行了migrate命令

python manage.py迁移myapp

此输出为
ValueError

Running migrations for myapp:
 - Migrating forwards to 0004_add_creator.
 > myapp:0004_add_creator
suser= damon of type= <class 'django.contrib.auth.models.User'>
Error in migration: myapp:0004_add_creator
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
....
File "/usr/local/lib/python2.6/dist-packages/south/migration/migrators.py", line 57, in <lambda>
    return (lambda: direction(orm))
  File "/home/me/dev/python/django/myapp/migrations/0004_add_creator.py", line 14, in forwards
    category.creator = suser
  File "/home/me/Django-1.4/django/db/models/fields/related.py", line 366, in __set__
    self.field.name, self.field.rel.to._meta.object_name))
ValueError: Cannot assign "<User: damon>": "MyCategory.creator" must be a "User" instance.
为myapp运行迁移:
-正向迁移到0004\u添加\u创建者。
>myapp:0004\u添加\u创建者
suser=damon类型=
迁移错误:myapp:0004\u添加\u创建者
回溯(最近一次呼叫最后一次):
文件“manage.py”,第11行,在
执行\u管理器(设置)
....
文件“/usr/local/lib/python2.6/dist packages/south/migration/migrators.py”,第57行,在
返回(λ:方向(orm))
文件“/home/me/dev/python/django/myapp/migrations/0004_add_creator.py”,第14行
category.creator=suser
文件“/home/me/Django-1.4/Django/db/models/fields/related.py”,第366行,在__
self.field.name,self.field.rel.to.\u meta.object\u name))
ValueError:无法分配“”:“MyCategory.creator”必须是“用户”实例。

我不明白这里发生了什么..print语句显示用户
damon
的类型是
django.contrib.auth.models.user
south
是否需要其他类型?有人能帮忙吗?

首先,您需要在数据迁移中冻结
django.contrib.auth
。这可以通过以下方式实现:

python manage.py datamigration myapp add_creator --freeze auth
其次,您需要通过
orm
字典正确引用对象:

def forwards(self, orm):
    suser = orm['auth.User'].objects.filter(is_superuser=True)[0]
    print 'suser=',suser,'of type=',type(suser)
    for category in orm['myapp.MyCategory'].objects.all():
        category.creator = suser
        category.save()
def forwards(self, orm):
    suser = orm['auth.User'].objects.filter(is_superuser=True)[0]
    print 'suser=',suser,'of type=',type(suser)
    for category in orm['myapp.MyCategory'].objects.all():
        category.creator = suser
        category.save()