Python 使用父类的Django 1.7迁移

Python 使用父类的Django 1.7迁移,python,django,migration,Python,Django,Migration,我正在使用django 1.7编写一个迁移,我读了一些关于它的文章,但我不明白如何使用一个层次结构,比如在de模型中,country__name='MEXICO',并返回一个MX键,使用这个值我可以插入到表中,我想这是我的问题 def add_holder_data(apps, schema_editor): table = 'PODER.DBF' m = MigrationFromDBase() fields = json.dumps(m.fetch_dbase_tab

我正在使用django 1.7编写一个迁移,我读了一些关于它的文章,但我不明白如何使用一个层次结构,比如在de模型中,country__name='MEXICO',并返回一个MX键,使用这个值我可以插入到表中,我想这是我的问题

def add_holder_data(apps, schema_editor):
    table = 'PODER.DBF'
    m = MigrationFromDBase()
    fields = json.dumps(m.fetch_dbase_table(table))

    Holder = apps.get_model('holder', 'Holder')
    data = []
    for f in json.loads(fields):
        if int(f['NREFPOD']) > 0 and int(f['NREFPOD']) != None:
        data.append(
            Holder(
                id=int(f['NREFPOD']), name =f['SOLICITA'],  street = f['CALLE'], city = f['CIUDAD'],
                   cp = f['CODIGO'], country__name = f['PAIS'], nationality = f['NACION'], rfc = f['RFC'],
                   power = f['PODER_EN'], no_rgp = f['NORGP'], person_type = f['PERFISICA'],
                   national = f['NACIONAL'], compulsa = int(f['COMPULSA'])
            )
        )
    Holder.objects.bulk_create(data)


def remove_holder_data(apps, schema_editor):
    Holder = apps.get_model('holder', 'Holder')
    Holder.objects.all().delete()


class Migration(migrations.Migration):
    dependencies = [('holder','0001_initial')]

    operations = [
    migrations.RunPython(
        add_holder_data,
        reverse_code=remove_holder_data
        ),
    ]
如果我使用country=f['PAIS'],它会给我一个错误:值太长,无法改变类型字符(2),这是因为f['PAIS]有一个全名。该类在country.code字段中有四个字符

如果我使用country\u name=f['PAIS'],它会给我一个错误:TypeError:'country\u name'是此函数的无效关键字参数,在这种情况下,我不知道为什么会出现错误

我需要先得到国家代码

class Country(models.Model):
    code = models.CharField(max_length=4, verbose_name=_('Código'))
    name = models.CharField(max_length=80, verbose_name=_('Nombre'))

    def __str__(self):
        return self.name
这是持有人的定义:

class Holder(models.Model):

    name = models.CharField(max_length=80, verbose_name=_('Nombre')) 
    street = models.CharField(max_length=70, blank=True,     verbose_name=_('Calle'))
    city = models.CharField(max_length=70, blank=True, verbose_name=_('Ciudad'))
    cp = models.CharField(max_length=10, blank=True, verbose_name=_('Código Postal'))
    country = models.CharField(Country, max_length=50)
    nationality = models.CharField(Nacionality, blank=True, max_length=50)
    rfc = models.CharField(max_length=13, blank=True, verbose_name=_('RFC'))

    def __str__(self):
        return self.name

解决这个问题的方法是,清理国家的数据,改变我的持有者模型

class Holder(models.Model):

    name = models.CharField(max_length=100, verbose_name=_('Nombre')) 
    street = models.CharField(max_length=100, blank=True,     verbose_name=_('Calle'))
    city = models.CharField(max_length=100, blank=True, verbose_name=_('Ciudad'))
     cp = models.CharField(max_length=10, blank=True, verbose_name=_('Código Postal'))
    country = models.ForeignKey(Country)
    nationality = models.CharField(Nacionality, blank=True, max_length=50)
    rfc = models.CharField(max_length=13, blank=True, verbose_name=_('RFC'))
之后,它总是会出现一个错误,比如:必须是类别国家的对象,并在打印时发现它使用
应用程序发送给我的对象
\uuuuuuu fake\uuuuuu.Holder对象
。获取模型('app','class')
,但如果从Holder导入Holder导入类,它将打印
Holder.Holder对象
,因此,我认为这两个对象将是相同类型的对象,以检索正确的国家/地区模型对象,这是我的迁移类

from addons.utility import MigrationFromDBase
import simplejson as json

from addons.tools import CapitalizeMultiplesWords, CleanEmptySpaceInWords,  CleanUnicode, UniqueJson

def discover_country(instance, country):
    """
     Cleaned the string to get the country city
     :param country: is a country from dbase and it contains no normalized data
     :return: Country Object
    """
    obj = instance
    if country.find('_n_') != -1:
        _clean_country =   CleanEmptySpaceInWords(str(CapitalizeMultiplesWords(country)))
    else:
        _clean_country =  CleanUnicode(str(CleanEmptySpaceInWords(str(CapitalizeMultiplesWords(country)))))
    try:
        _country = obj.objects.get(name = _clean_country)
    except obj.DoesNotExist:
        _country = obj.objects.get(name = 'unknown')
    return _country



def add_holder_data(apps, schema_editor):
    table = 'TABLE.DBF'
    m = MigrationFromDBase()
    fields = json.dumps(m.fetch_dbase_table(table))

    holder_instance = apps.get_model('holder', 'Holder')
    country_instance = apps.get_model('addons', 'Country')


    for f in UniqueJson(json.loads(fields), 'NREFPOD'):
        if int(f['NREFPOD']) > 0 and int(f['NREFPOD']) != None:

            if f['SOLICITA'].strip() == "" :
                f['SOLICITA'] = 'unknown'
            if f['PERFISICA'].strip() == "":
                f['PERFISICA'] = ''
            if f['NACIONAL'].strip() == "":
                f['NACIONAL'] = ''
            _country = discover_country(country_instance, f['PAIS'])
            holder_instance.objects.get_or_create (
                id=int(f['NREFPOD']), name = f['SOLICITA'],  street = f['CALLE'], city = f['CIUDAD'],
                   cp = f['CODIGO'], country = _country, rfc = f['RFC'],
                   power = f['PODER_EN'], no_rgp = f['NORGP'], person_type = f['PERFISICA'],
                   national = f['NACIONAL'], compulsa = int(f['COMPULSA'])
            )


def remove_holder_data(apps, schema_editor):
    Holder = apps.get_model('holder', 'Holder')
    Holder.objects.all().delete()


class Migration(migrations.Migration):
    dependencies = [('holder','0001_initial')]

    operations = [
        migrations.RunPython(
        add_holder_data,
        reverse_code=remove_holder_data
        ),
    ]

你能粘贴持有者的定义吗?
Holder(…,country=country(code=…,name=f['PAIS']),…)
有效吗?