Ограничение базы данных 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 возникшую у вас проблему.