use*_*892 2 python django django-migrations
我需要将模型字段的关系从ForeignKey更改为ManyToManyField.这带有数据迁移,用于更新预先存在的数据.
以下是原始模型(models.py):
class DealBase(models.Model):
[...]
categoria = models.ForeignKey('Categoria')
[...]
)
Run Code Online (Sandbox Code Playgroud)
我需要模型字段'categoria'来与应用'deal'中的模型'Categoria'建立多种关系.
我做了什么:
在DealBase中创建一个新字段'categoria_tmp'
class DealBase(models.Model):
categoria = models.ForeignKey('Categoria')
categoria_tmp = models.ManyToManyField('Categoria',related_name='categoria-temp')
Run Code Online (Sandbox Code Playgroud)进行模式迁移
python manage.py makemigrations
编辑migrationfile.py以将数据从categoria迁移到categoria-tmp
def copy_deal_to_dealtmp(apps, schema_editor):
DealBase = apps.get_model('deal', 'DealBase')
for deal in DealBase.objects.all():
deal.categoria_tmp.add(deal.categoria)
deal.save()
class Migration(migrations.Migration):
dependencies = [
('deal', '0017_dealbase_indirizzo'),
]
operations = [
migrations.AddField(
model_name='dealbase',
name='categoria_tmp',
field=models.ManyToManyField(related_name='categoria-temp', to='deal.Categoria'),
preserve_default=True,
),
migrations.RunPython(
copy_deal_to_dealtmp
)
]
Run Code Online (Sandbox Code Playgroud)进行数据迁移
python manage.py migrate
最后,我需要删除列'dealbase.categoria'并将列'dealbase.categoria-tmp'重命名为'dealbase.categoria'
我陷入了第5步.
有人可以帮帮我吗?我在网上找不到答案,我正在使用Django 1.8.
谢谢!
您只需创建另外两个迁移:一个用于删除旧字段,另一个用于更改新字段.
首先删除dealbase.categoria并创建一个迁移,然后将dealbase.categoria-tmp重命名为dealbase.categoria并创建另一个迁移.
这将删除第一个字段,然后将tmp字段更改为正确的名称.
| 归档时间: |
|
| 查看次数: |
9445 次 |
| 最近记录: |