NOT_NULL contraint failed when adding foreign key to model in django
Я создаю приложение для заметок. Когда я пытаюсь создать внешний ключ для связи пользователя и его заметок, я получаю ошибку при использовании
python manage.py migrate
. Я очень новичок во внешних ключах, я просмотрел документацию Django, вот как они создают внешний ключ.
вот код :
from django.db import models
class User(models.Model):
username = models.CharField(max_length=50)
email = models.EmailField(max_length=50)
class Note(models.Model):
body = models.TextField(null=True, blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.body[0:50]
вот ошибка :
django.db.utils.IntegrityError: NOT NULL constraint failed: new__api_note.author_id
Ваша проблема заключается в том, что в базе данных есть существующие заметки, у которых нет поля author_id
, но вы не установили значение по умолчанию и не разрешили держать его пустым. Таким образом, необходимо IntegrityError
добавить поле.
Вы можете решить эту проблему двумя способами:
Разрешить, чтобы поле было пустым
- Удалите последнюю миграцию в папке migrations .
- Отредактируйте поле author следующим образом:
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
- Запустите makemigrations и выполните миграцию .
Установите значение по умолчанию для поля
- Удалите последнюю миграцию из папки migrations. Вы также можете отредактировать ее, но проще всего просто удалить ее .
- Снова запустите makemigrations .
- Во время выполнения миграции появится запрос, хотите ли вы указать значение по умолчанию для поля. Выберите "Provie a one of value for now" .
- Тип
models.User.objects.all().first()
или альтернативно какой-либо другой "defalt" автор для существующих заметок .
- Run
migrate
Вы также можете решить проблему, удалив все существующие заметки из базы данных