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