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