我必须根据标题的第一个字母向我的模型添加一个新字段“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)
但是桌子上现有的书怎么样呢?是否可以说南方自动将初始字段设置为上面已有的书籍?
或者我必须写一个更新的脚本吗?每本书都按照我的要求设定首字母?
答案 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()