我有一个场景,我需要将数据从一个模型(已经存在一些数据的旧模型)移动到另一个模型,然后在必要时转移到另一个模型。我可以添加这个在迁移文件中进行处理,这样我就可以用python manage.py migrate
命令完成要求。
这是所有旧项目存在的模型:
class UserFavorite(CreatedAtMixin):
user = models.ForeignKey('auth.User')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
objects = UserFavoriteManager()
def __str__(self):
try:
return str(self.content_object)
except AttributeError:
return 'None'
class Meta:
get_latest_by = "date_added"
unique_together = ("user", "content_type", "object_id")`
以下是我需要在上面的模型中按项目首先插入项目的模型:
class CollectionItem(models.Model):
sort_number=models.PositiveIntegerField(blank=True,null=True)
type=models.CharField(max_length=20,null=False, blank=False)
item_type = models.ForeignKey(ContentType, limit_choices_to=models.Q(app_label='news', model='News') | models.Q(app_label='work', model='Work') | models.Q(app_label='collection', model='Quote'))
item_id = models.PositiveIntegerField()
item = generic.GenericForeignKey('item_type', 'item_id')
class Meta:
verbose_name = "Collection Item"
verbose_name_plural = "Collection Items"
def __str__(self):
return self.item.title
然后我需要将其插入:
class Collections(CreatedAtMixin):
user = models.ForeignKey('auth.User', related_name='collections_user')
collection_place=models.ForeignKey('companies.CompanyOffice',related_name='collections_place',null=True)
collection_name = models.CharField(max_length=40,null=False, blank=False)
description = models.TextField(null=True, blank=True)
items=models.ManyToManyField('collection.CollectionItem')
def __str__(self):
return self.collection_name
class Meta:
unique_together = ("user","collection_name")
verbose_name = "Collection"
verbose_name_plural = "Collections"
ordering = [ '-created_at']
get_latest_by = "created_at"
答案 0 :(得分:1)
首先编写新模型和create a schema migration。
然后create a data migration并编写所需的代码以将旧模型数据传输到新模型(提示:如果可能,还要编写代码以恢复迁移)。
最后 - 假设旧模型不再使用 - 删除旧模型代码并创建最后一个模式迁移。
详细信息都记录在上面的链接中,剩下的内容特定于您的应用程序,因此我们无法提供帮助。