数据迁移期间的Django-south ValueError

时间:2013-07-11 17:35:39

标签: django foreign-keys django-south data-migration

我正在使用Django构建系统进行一些更新,现在我在南方数据迁移方面遇到了一些麻烦。

我有一个模型Cargo,它有一个auth.User外键,现在我想将一个外键添加到另一个与auth.User相关的模型(公司)。

class Cargo(models.Model):
    company = models.ForeignKey(
        'accounts.Company',
        related_name='cargo_company',
        verbose_name='empresa',
        null=True,
        blank=True
    )

    customer = models.ForeignKey(
        'auth.User',
        related_name='cargo_customer',
        verbose_name='embarcador',
        limit_choices_to={'groups__name': 'customer'},
        null=True,
        blank=True
    )

我还有一个UserProfile模型,它与auth.User和Company有关,如下所示:

class UserProfile(models.Model):
    company = models.ForeignKey(
        Company, 
        verbose_name='Empresa', 
        null=True
    )
    user = models.OneToOneField('auth.User')

我创建并运行了一个模式迁移,将公司字段添加到Cargo,然后我创建了一个数据迁移,这样我就能填满我所有货物的公司领域。我想出的是:

class Migration(DataMigration):

def forwards(self, orm):
    try:
        from cargobr.apps.accounts.models import UserProfile
    except ImportError:
        return

    for cargo in orm['cargo.Cargo'].objects.all():
        profile = UserProfile.objects.get(user=cargo.customer)
        cargo.company = profile.company
        cargo.save()

但是当我尝试运行它时,我收到以下错误:

ValueError: Cannot assign "<Company: Thiago Rodrigues>": "Cargo.company" must be a "Company" instance.

但正如你在上面的模型中看到的那样,两个领域都属于同一种类型......任何人都可以给我一个亮点吗?我在Django 1.3.1和南0.7.3

编辑:如下所述,UserProfileCompany模型位于accounts模块中,Cargo位于cargo 1}}。所以,简而言之,我有accounts.UserProfileaccounts.Companycargo.Cargo

1 个答案:

答案 0 :(得分:0)

您使用的型号版本之间可能存在不匹配,因为您直接导入:

from cargobr.apps.accounts.models import UserProfile

相反,请尝试在迁移中使用orm引用该模型。

class Migration(DataMigration):

def forwards(self, orm):
    for cargo in orm['cargo.Cargo'].objects.all():
        profile = orm['accounts.UserProfile'].objects.get(user=cargo.customer)
        cargo.company = profile.company
        cargo.save()