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 добавить поле.

Вы можете решить эту проблему двумя способами:

Разрешить, чтобы поле было пустым

  1. Удалите последнюю миграцию в папке migrations
  2. .
  3. Отредактируйте поле author следующим образом:
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
  1. Запустите makemigrations и выполните миграцию
  2. .

Установите значение по умолчанию для поля

  1. Удалите последнюю миграцию из папки migrations. Вы также можете отредактировать ее, но проще всего просто удалить ее
  2. .
  3. Снова запустите makemigrations
  4. .
  5. Во время выполнения миграции появится запрос, хотите ли вы указать значение по умолчанию для поля. Выберите "Provie a one of value for now"
  6. .
  7. Тип models.User.objects.all().first() или альтернативно какой-либо другой "defalt" автор для существующих заметок
  8. .
  9. Run migrate

Вы также можете решить проблему, удалив все существующие заметки из базы данных

Вернуться на верх