IntegrityError at /answer/ NOT NULL constraint failed: answer_answer.post_id
У меня есть 2 модели одна для Question и одна для Answer когда я представил answer форму она выдает мне ошибку как эта: IntegrityError at /answer/ NOT NULL constraint failed: answer_answer.post_id но когда я добавил blank=True и null=True я могу вывести форму, но мне нужно зайти в админку и выбрать вопрос, на который я хочу, чтобы появился ответ, а это не то, что я хочу. пожалуйста, как я могу решить эту ошибку?
мои модели
class Question(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100, blank=False, null=False)
body = RichTextField(blank=False, null=False)
category = models.CharField(max_length=50, blank=False, null=False)
def __str__(self):
return str(self.user)
class Answer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
answer = RichTextField(blank=False, null=False)
post = models.ForeignKey(Question, on_delete=models.CASCADE)
def __str__(self):
return str(self.user)
взгляды
def viewQuestion(request, pk):
question = Question.objects.get(id=pk)
answers = Answer.objects.filter(post_id=question)
context = {'question':question, 'answers':answers}
return render(request, 'viewQuestion.html', context)
class My_Question(LoginRequiredMixin, CreateView):
model = Question
fields = ['title', 'body', 'category']
template_name = 'question.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.user = self.request.user
return super (My_Question, self).form_valid(form)
class My_Answer(LoginRequiredMixin, CreateView):
model = Answer
fields = ['answer']
template_name = 'answer.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.user = self.request.user
return super (My_Answer, self).form_valid(form)
шаблон viewQuestion:
<div class="container">
<div class="row justify-content-center">
<h1>{{question.title}}</h1>
<hr>
</div>
<br>
<h3 style="font-family: arial;">{{question.body|safe}}</h3>
<hr>
<br>
<h5>{{question.user.username.upper}}</h5>
</div>
<!--question-->
<div class="container">
<div class="row justify-content-center">
<a href="{% url 'answer' %}" class="btn btn-primary">Post Your Answer</a>
</div>
</div>
<br>
<br>
<!--answer-->
<div class="container">
{% for answer in answers reversed %}
<div class="row justify-content-center">
<p>{{answer.user}}</p>
<p>{{answer.answer|safe}}</p>
</div>
{% endfor %}
</div>
Вы сохраняете экземпляр ответа, содержащий только ответ из формы и пользователя из запроса, но где находится id поста, который не может быть никаким и является обязательным. Вы можете передать id поста из формы ответа с помощью скрытого поля ввода.