3

我正在尝试将一些字段从一个 django 模型移动到一个新模型。假设我有一个书本模型:

class Book(models.Model):
  title = models.CharField(max_length=128)
  author = models.CharField(max_length=128)

我决定我需要一个单独的作者模型(添加额外的数据等)。因此,请记住,我有一个正在运行的充满数据的应用程序,保持兼容性的所需布局将是:

class Author(models.Model):
  name = models.CharField(max_length=128, null=True) # null at first; filled with datamigration
  nationality = models.CharField(max_length=64, null=True) # we don't have nationality for existing authors, but we'll ask the new ones

class Book(models.Model):
  title = models.CharField(max_length=128)
  author_model = models.ForeignKey(Author, null=True)
  @property
  def author(self):
    return self.author_model.name
  @author.setter
  def author(self, newval):
    self.author_model.name = newval

这样,我必须创建添加作者的模式迁移,然后是数据迁移来传输数据并填充书籍的 author_model_id,最后是数据迁移以从“书籍”表中删除“作者”列。问题是,将 Book.author 从字段更改为属性后,我的迁移是否有效?我的意思是,如果在之前的一次迁移中,South 尝试访问 Book.author(期望 CharField),它实际上会获得一个试图获取不存在模型的属性。怎么做才对?

4

1 回答 1

1

我将首先在一次迁移中将作者 CharField 重命名为 author_str,然后添加新模型并进行数据迁移,然后删除 author_str 字段。

Django - 如何使用 South 重命名模型字段?

于 2013-05-02T09:39:13.827 回答