使用基于South现有字段的值向模型添加新字段

时间:2014-04-26 12:27:35

标签: python django django-models django-south

我必须根据标题的第一个字母向我的模型添加一个新字段“initial”。
我知道我可以添加新字段,覆盖save()以自动保存从现在起的初始字段如下所示,使用South进行迁移。

models.py

class Book(models.Model):
    ...
    name = models.CharField(max_length=255, primary_key=True)
    ...
    initial = models.CharField(max_length=1, blank=True, default='')

    def save(self, *args, **kwargs):
        if self.name[0].isalpha():
            self.initial = self.name[0]
        else:
            self.initial = '#'
        super(Manga, self).save(*args, **kwargs)

但是桌子上现有的书怎么样呢?是否可以说南方自动将初始字段设置为上面已有的书籍?
或者我必须写一个更新的脚本吗?每本书都按照我的要求设定首字母?

1 个答案:

答案 0 :(得分:0)

您可以使用南方数据迁移refer

来实现

创建架构迁移后,您必须运行

./manage.py datamigration app_name migration_name

它将为您创建一个文件,就像模式迁移一样 如果你打开文件,你会看到South已经成为迁移的外壳;模型定义在那里,前向()和后向()函数都存在,但两者中都没有代码。我们将编写一些代码来在前向函数中设置初始字段值:

def forwards(self, orm):
    for book in orm.Book.objects.all():
        if book.name[0].isalpha():
            book.initial = book.name[0]
        else:
            book.initial = '#'
        book.save()