gpt4 book ai didi

python - Django 自定义迁移未执行

转载 作者:行者123 更新时间:2023-11-29 10:13:35 24 4
gpt4 key购买 nike

所以我在 django 数据库表中添加了一个新的“状态”字段。该字段需要一个默认值,因此我将其默认为“New”,但随后我添加了一个自定义迁移文件,该文件对该表中的所有对象调用 save() 方法,因为我重写了 save() 来检查另一个表并从中提取正确的状态。但是,运行此迁移后,所有状态仍设置为“新建”,因此看起来保存未执行。我通过在运行迁移后手动调用所有对象上的保存来测试这一点,并且状态按预期更新。

这是 models.py 中的表模型:

class SOS(models.Model):
number = models.CharField(max_length=20, unique=True)
...
# the default="New" portion is missing here because I have a migration to remove it after the custom migration (shown below) that saves the models
status = models.CharField(max_length=20)

def save(self, *args, **kwargs):
self.status = self.history_set.get(version=self.latest_version).status if self.history_set.count() != 0 else "New"
super(SOS, self).save(*args, **kwargs)

这是迁移:

# Generated by Django 2.0.5 on 2018-05-23 13:50
from django.db import migrations, models

def set_status(apps, schema_editor):
SOS = apps.get_model('sos', 'SOS')
for sos in SOS.objects.all():
sos.save()

class Migration(migrations.Migration):

dependencies = [
('sos', '0033_auto_20180523_0950'),
]

operations = [
migrations.RunPython(set_status),
]

所以对我来说,很明显我在迁移过程中做错了什么,但我将它与我在 Django Documentation 中看到的完全匹配。我还将它与 this 进行了比较StackOverflow 的答案,我看不出我做错了什么。当我运行迁移时没有错误,但我编写的自定义迁移几乎立即运行,这看起来很奇怪,因为当我手动保存时,大约需要 5 秒才能保存所有 300 多个条目。

有什么建议吗?

附注如果我忽略了任何相关细节,请告诉我。

最佳答案

当您运行迁移并从应用程序获取模型时,您不能使用自定义管理器或自定义保存或创建或类似的东西。这个模型只有字段,仅此而已。如果您想实现您想要的目标,您应该将逻辑添加到迁移中,如下所示:

# comment to be more than 6 chars...
def set_status(apps, schema_editor):
SOS = apps.get_model('sos', 'SOS')
for sos in SOS.objects.all():
if sos.history_set.exists():
sos.status = sos.history_set.get(version=sos.latest_version).status
else:
sos.status = "New"
sos.save()

关于python - Django 自定义迁移未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50514059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com