Django NOT NULL constraint failed: TourSite_books.user_id

Вылетает вот такая ошибка: ошибка

пробовал вот такой способ решения (views.py):

order = form.save(commit=False)
order.user = request.user
order.save()

Вот фрагменты кода: models.py

class Books(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    tour = models.ForeignKey(Tours, on_delete=models.CASCADE, default=None)
    booked_at = models.DateTimeField(auto_now_add=True)
    comment = models.CharField(max_length=128)

    def __str__(self):
        return f"{self.user} {self.tour} {self.booked_at}"

    class Meta:
        verbose_name_plural = "Books"

views.py

class BookView(CreateView):
    model = Books
    form_class = BookForm
    template_name = "TourSite/book.html"

    def form_valid(self, form):
        form.instance.author = self.request.user
        form.save()
        return HttpResponse("Вы успешно забронировали тур!")

forms.py

class BookForm(ModelForm):
    class Meta:
        model = Books
        fields = {"tour", "comment"}

html

{% load HandF %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Бронирование | AMITour</title>
    <link rel="stylesheet" href="/static/TourSite/css/styles.css">
    <link href='https://fonts.googleapis.com/css?family=Pangolin' rel='stylesheet'>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
{% header %}
Ви бронируете с: {{ request.user }}
<br>Забронировать тур:
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <p><button class="btn btn-primary w-100 py-2" type="submit">Отправить</button></p>
    </form>
{% footer %}
</body>
</html>

Надо будет что-то еще, пишите скину

В модели Books не задано дефолтное значение поля user, по умолчанию null равно False. Соответственно, при сохранении новой записи, будет вылетать эта ошибка, если поле user не задано.

Во вьюхе есть такое: form.instance.author = self.request.user Думаю author следует заменить на user

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