【发布时间】:2015-02-04 00:22:40
【问题描述】:
我正在使用 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__name = f['PAIS'] 它会给我一个错误:TypeError: 'country_name' is an invalid keyword argument for this function,在这种情况下,我不知道为什么会出错。
我需要先得到国家代码?
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
【问题讨论】:
-
你能粘贴Holder的定义吗?
Holder(..., country=Country(code=..., name=f['PAIS'])), ...)有效吗?