如何删除Django中的默认值函数

ber*_*uic 5 django django-models django-migrations

在对此问题的评论中,我询问了如何使用默认值函数删除字段.总之,示例代码是:

def get_deadline():
    return datetime.today() + timedelta(days=20)

class Bill(models.Model):
    name = models.CharField(max_length=50)
    customer = models.ForeignKey(User, related_name='bills')
    date = models.DateField(default=datetime.today)
    deadline = models.DateField(default=get_deadline)
Run Code Online (Sandbox Code Playgroud)

我对代码的问题是:

如何deadline在删除get_deadline功能的同时再次删除该字段 ?我删除了一个带有默认值函数的字段,但是现在Django在删除函数后在启动时崩溃了.我可以手动编辑迁移,在这种情况下也可以,但如果您只是更改了默认功能,并想删除旧功能怎么办?

我最终删除了引用它的迁移的默认部分,但是如何很好地删除它?

我能想到的唯一方法是压缩迁移,这样使用该功能的迁移就会消失,但这并不总是一种选择.

AKS*_*AKS 6

遵循历史模型的文档:

对于字段选项中的函数的引用(例如,upload_tolimit_choices_to管理器的模型管理器声明)use_in_migrations = True在迁移中被序列化,因此只要存在引用它们的迁移,就需要保留函数和类.还需要保留任何自定义模型字段,因为这些字段是由迁移直接导入的.

.....

要删除旧引用,可以压缩迁移,或者,如果没有很多引用,则将它们复制到迁移文件中.

使用方法获取default字段选项的值与字段中描述的相同upload_to.如果要删除方法,文档本身为您提供了两个选项:

  1. 壁球迁移 - 如果你不再需要那些
  2. 编辑迁移文件:将功能复制到迁移文件并在迁移中编辑引用.

评论更新:

编辑迁移文件的第2步中,我刚刚包含了文档中描述的方法.您可以选择如何编辑迁移.您可以复制迁移文件中的函数并编辑引用,或者只是从迁移文件中删除默认字段,或者您可以使用其他文件中的其他函数.