Ограничение базы данных NOT NULL не сработало Ошибка Django

Я хочу показать, какой пользователь добавляет книгу на мой сайт, и я проверил, что пользователь подписан, но я получил эту ошибку.

Модели:

class Books(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    title = models.CharField(max_length=150)
    author = models.CharField(max_length=150)
    description = models.TextField()
    price = models.DecimalField(max_digits=5, decimal_places=2)
    book_cover = models.ImageField(upload_to='books  covers/', blank=True)

    def __str__(self):
        return f'{self.title} by {self.author}.'

    def get_absolute_url(self):
        return reverse('book_detail', args=[self.id])

Просмотров:

class AddBook(LoginRequiredMixin, generic.CreateView):
    model = Books
    form_class = AddBookForm
    template_name = 'books/add_book.html'

Я получил эту ошибку...:

IntegrityError at /books/add_book/
NOT NULL constraint failed: books_books.user_id

Проблема возникает в классе Books модели, а именно в ForeignKey поле user. По умолчанию Django требует, чтобы поле ForeignKey имело значение; оно не может быть NULL. В вашем AddBook классе представления, когда создается экземпляр книги, поле user случайно оставлено как NULL, что нарушает NOT NULL ограничение базы данных для этого поля.

Чтобы решить эту проблему, вам нужно переопределить метод form_valid в вашем классе AddBook, чтобы включить информацию о текущем пользователе в качестве значения для поля user, как показано ниже:

Views:

class AddBook(LoginRequiredMixin, generic.CreateView):
    model = Books
    form_class = AddBookForm
    template_name = 'books/add_book.html'

    def form_valid(self, form):
        form.instance.user = self.request.user # Fetch and assign the logged in user as user
        return super().form_valid(form)

Это исправит database NOT NULL constraint возникшую у вас проблему.

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