Как отфильтровать модель, чтобы получить ответ пользователя на текущий вопрос
У меня есть две модели Answer и Question. Когда пользователь задает вопрос, я хочу, чтобы другой пользователь мог разместить ответ на текущий вопрос, подобно stack overflow, я знаю, что при использовании этого метода: MyModel.objects.all() вернет все ответы из всех вопросов на каждый вопрос, это не то, что я хочу. Как я могу сделать это в Django, пожалуйста?
моя модель
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, null=False, blank=False, on_delete=models.CASCADE)
answer = RichTextField(blank=False, null=False)
post = models.ForeignKey(Question, null=False, blank=False, on_delete=models.CASCADE)
def __str__(self):
return str(self.user)
я хочу передать ответ пользователя в это представлениеВопрос
моя точка зрения
def viewQuestion(request, pk):
question = Question.objects.get(id=pk)
context = {'question':question}
return render(request, 'viewQuestion.html', context)
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)
Сначала необходимо добавить атрибут related_name в атрибут post в модели Answer.
class Answer(models.Model):
...
post = models.ForeignKey(Question, null=False, blank=False, on_delete=models.CASCADE, related_name = "answers")
Тогда вы можете получить ответы от question таких как question.answers.
Предлагаем вам форму ответа в функции viewQuestion, как это, хорошо следовать этому шагу для получения ответов, связанных с вопросом.
def viewQuestion(request, pk):
question = Question.objects.get(id=pk)
form = MyForm()
if request.method == "POST":
form = MyForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.post = question
instance.save()
return redirect('my_success_url')
context = {
'question':question,
'answers': Answer.objects.filter(post=question),
'form':form
}
return render(request, 'viewQuestion.html', context)
вместо Answer.objects.filter() можно использовать question.answers