Не удалось выполнить ограничение FOREIGN KEY из-за моделей. DO_NOTHING - PullRequest
1 голос
/ 19 июня 2019

У меня есть этот фрагмент кода для models.py

class Provider(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING)
    provider = models.CharField(max_length=100, unique=True)
    active = models.BooleanField(default=True)

когда я пытался удалить объект, я сталкивался с ошибкой:

django.db.utils.IntegrityError: сбой ограничения FOREIGN KEY

Я столкнулся с этой проблемой на django 2.x, так как все было прекрасно на 1.11. Я провел небольшой поиск и обнаружил, может ли эта проблема возникнуть в этой части on_delete=models.DO_NOTHING. Так как же это исправить, сохранив все как есть?

1 Ответ

1 голос
/ 19 июня 2019

Обычно вы говорите Django ничего не делать, когда вы удаляете пользователя.Таким образом, вы попытаетесь удалить строку, у которой есть связанный внешний ключ, это ожидаемое поведение.Если вы хотите сохранить модель провайдера, даже если пользователь был удален, вы должны сделать его обнуляемым и использовать модели. SET_NULL.Если у провайдера нет смысла в вашей логике, вы можете каскадировать.Если вам нужно переназначить пользователя по умолчанию, вы можете использовать пользовательский метод.

...