Как отфильтровать модель, чтобы получить ответ пользователя на текущий вопрос

У меня есть две модели 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

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