Пакетные изменения в базе данных django - PullRequest
3 голосов
/ 05 января 2012

Я недавно добавил поля слагов в мои модели баз данных MySQL (я не знаю, почему мне не пришло в голову сделать это раньше). Теперь у меня есть куча пустых полей в моей базе данных. Я включил определение сохранения в каждую модель

class test(models.Model):
    q = models.CharField(max_length=30)
    s = models.SlugField()

    def save(self, *args, **kwargs):
        self.s = slugify(self.q)
        super(test, self).save(*args, **kwargs)

Теперь я хочу написать что-нибудь, чтобы заполнить каждую запись в моих моделях. Любые предложения о том, какой код я могу написать, возможно, чтобы он циклически проходил по всем моим моделям / записям и заполнял слагов? Дополнительное осложнение (хотя я не уверен, что меня это волнует). У меня есть поле в каждой модели:

last_modified = models.DateTimeField("Last Modified", auto_now=True)

Я бы предпочел не запускать это, потому что записи на самом деле не изменяются. Можно ли заполнять слагов без обновления полей last_modified?

1 Ответ

2 голосов
/ 05 января 2012

Ну, если данных не много, и это всего лишь одна вещь, просто сделайте это в оболочке:

$ python manage.py shell
>>> from my_app.models import Test
>>> for obj in Test.objects.all():
>>>     obj.save()

Если вы собираетесь делать это много, напишите настраиваемая команда управления , которая делает это.

Что касается вашей проблемы auto_now, по этой причине я перестал использовать auto_now и auto_now_add.Каждый раз, когда я их использовал, я всегда вырывал их позже.На самом деле разработчики Django заявили, что считают их устаревшими, и, вероятно, они будут удалены в будущем.Я бы просто отредактировал исходный код и удалил эту опцию перед запуском вашей команды, а затем либо добавил ее обратно, либо заменил ее на собственную save() логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...