Как добавить правила «ON DELETE» в существующий столбец таблицы базы данных PostgreSQL? - PullRequest
0 голосов
/ 13 декабря 2018

Я использую PostgreSQL в проекте Django.Django не поддерживает правила «при удалении» на уровне базы данных.На уровне приложения он разрешает этот параметр при установке ForeignKey для модели, но он используется только для эмуляции поведения при удалении экземпляров.Я пытаюсь запустить миграцию данных, которая удаляет набор строк из таблицы, на которую ссылается другая.Модели выглядят примерно так:

class Album(models.Model):
    name = models.CharField(max_length=128)
    # ...

class Track(models.Model):
    name = models.CharField(max_length=128)
    album = models.ForeignKey(Album, related_name='tracks', null=True, on_delete=models.SET_NULL)
    # ...

Я не знаю, должно ли это поведение эмулироваться в вызовах delete, выполняемых на наборах запросов, или только в экземплярах модели.Для меня ни один не работает.Самым чистым решением в моем представлении было бы добавить RunSQL, который добавляет правило «ON DELETE SET NULL» к внешнему ключу Track.album на уровне базы данных (до RunPython, который фактически пытается удалить строки альбома).Проблема в том, что Django, кажется, создает ограничение внешнего ключа с динамическим именем, поэтому, если я отбрасываю это ограничение по имени и создаю другое, я боюсь, что миграция может завершиться неудачно при развертывании.Разве нет простого способа добавить правило (или удалить / создать ограничение) по имени столбца?

...