Итак, я добавил новое поле «status» в таблицу базы данных django.Это поле нуждалось в значении по умолчанию, поэтому я по умолчанию установил его как «Новый», но затем я добавил специальный файл миграции, который вызывает метод save () для всех объектов в этой таблице, так как у меня есть переопределение 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 и я также сравнил его с этим ответом StackOverflow, и я не вижу, что я делаю неправильно.При запуске миграций ошибок нет, но созданная мною специальная программа запускается практически мгновенно, что кажется странным, поскольку, когда я выполняю сохранение вручную, для сохранения всех 300+ записей требуется около 5 секунд.
Есть какие-нибудь предложения?
PS Пожалуйста, дайте мне знать, если есть какие-либо соответствующие подробности, которые я забыл включить.