gpt4 book ai didi

django - 使用Django South将数据从一个模型迁移到另一个模型

转载 作者:行者123 更新时间:2023-12-04 13:24:32 34 4
gpt4 key购买 nike

我目前有一个结构需要重写以应对Django-CMS

当前的设置如下

class Video(models.Model):        
#embed_code_or_url = models.CharField(max_length=2000)
permalink = models.URLField(verify_exists=True, unique=True, max_length=255, default="http://", validators=[validate_youtube_address])
thumbnail = models.CharField(max_length=500, blank=True, null=True)
# Data
title = models.CharField(max_length=255, blank=True)
...

class VideoPlugin(CMSPlugin):
video = models.ForeignKey(Video)

现在,当我将所有字段从 Video传输到 VideoPlugin时,运行我的schemamigration,我还想在运行迁移时将所有信息从Video传输到VideoPlugin。

有没有人举例说明如何实现这一目标?

这是要运行的迁移的开始
class Migration(SchemaMigration):

def forwards(self, orm):

# Adding field 'VideoPlugin.permalink'
db.add_column('cmsplugin_videoplugin', 'permalink', self.gf('django.db.models.fields.URLField')(default='http://', unique=True, max_length=255), keep_default=False)

# Adding field 'VideoPlugin.thumbnail'
db.add_column('cmsplugin_videoplugin', 'thumbnail', self.gf('django.db.models.fields.CharField')(max_length=500, null=True, blank=True), keep_default=False)

# Adding field 'VideoPlugin.title'
db.add_column('cmsplugin_videoplugin', 'title', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), keep_default=False)

...

非常感谢您的帮助

最佳答案

您创建一个数据迁移:

$ python manage.py datamigration yourapp name_of_this_migration

这将卡住应用程序中的模型。如果迁移中涉及其他应用程序,则需要在该行中添加 --freeze app1 --freeze app2等,以将这些应用程序也包括在迁移中。

这将为您设置基本的迁移文件结构,但是 forwardsbackwards迁移为空。由您决定将数据从一个迁移到另一个的逻辑。但是,除了使用South ORM之外,它的工作方式与Django中的其他任何事情一样。对于应用程序中此迁移所驻留的任何模型,对于使用 orm.MyModel.objects参数添加的其他任何应用程序,请使用 --freeze,请使用 orm['someapp.SomeModel'].objects

除此之外,您只需要获取/过滤/创建等对象,就如同将数据从一个移动到另一个一样。显然,前向迁移需要将数据移动到现在所需位置的逻辑,而向后迁移应具有将数据还原到原始位置所需的逻辑。

然后,您可以在开发环境中前后迁移,以确保其正常工作。重要说明:这仅用于移动数据。请勿更改或删除数据迁移中的任何表结构。如果您需要在移动数据后删除表。数据迁移之后创建一个schemamigration。

关于django - 使用Django South将数据从一个模型迁移到另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877052/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com