0
あるモデルから別のモデルにデータを移動する必要がある場合(古いモデルのデータがある場合)別のモデルと別のモデルを順番に移動する必要がある場合このプロセスをマイグレーションファイルに追加して、ちょうど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"