У меня есть проект, в котором мне нужно изменить обычное поле на поле FK, и это в нескольких моделях. Проблема в том, что проект продуктивен, а база данных (Postgres) полна записей.
Я начал локально, просто бездумно изменив тип поля на forgein_key () и попытавшись выполнить миграцию. Кажется, что Django настолько умен, что пытается обновить это поле, но спотыкается из-за значений в модели, которых нет в связанной модели. Как я могу пропустить эти ошибки? Могу ли я сказать Django, чтобы установить FK == NULL, если соответствующая запись не существует?
Вот какой-то код:
from persons.models import Customer, Employee
class Insurance(models.Model):
id = models.BigAutoField(primary_key=True)
customer = models.ForeignKey(Customer, models.SET_NULL, blank=True, null=True)
employee_id = ForeignKey(Customer, models.SET_NULL, blank=True, null=True)
objects = models.Manager()
До тех полей, где поля char и отношение были сделано в коде бэкэнда. Причина, по которой я пытаюсь это сделать, заключается в том, что мне нужны функции из Django, такие как select / prefech_related для функции поиска в таблице страхования внешнего интерфейса. Пользователь должен иметь возможность искать также имя застрахованного лица, а не только его идентификатор.
Это ошибка, вызванная отсутствием записей:
django.db.utils.IntegrityError: insert or update on table "insurance_insurance" violates foreign key constraint "insurance_insur_customer_id_98e84761_fk_person_"
DETAIL: Key (customer_id)=(100883) is not present in table "person_customer".
Может кто-нибудь сказать мне solid безопасный способ сделать эти отношения?
Заранее спасибо!