【问题标题】:Django - Class Based View trouble How Combine DetailView with ListView in same templateDjango - 基于类的视图问题如何在同一模板中结合 DetailView 和 ListView
【发布时间】:2021-05-30 15:13:45
【问题描述】:

谁能告诉我如何将详细视图与列表视图结合并在同一个模板中显示信息,我会向你解释,我正在学习 Django,我正在尝试创建一个问答网络应用程序,我需要显示带有所有 awnsers 的问题,我需要在我的 detailview 中显示一个特定问题,显示在所有它 awsers 下方,比如 stackoverflow

#models.py
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User


# Create your models here.
class Question(models.Model):

    # user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="question", null=True)
    name = models.CharField(max_length=100)
    description = models.TextField(max_length=100)
    date = models.DateTimeField(auto_now_add=True)
    cant_resp = models.IntegerField(default=0)
    question_type = models.CharField(max_length=50, choices=QUESTION_TYPES_CHOICES)

    def __str__(self):
        return self.description




class Anwser(models.Model):

    # user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="anwser", null=True)
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    text = models.TextField(max_length=400)
    date= models.DateTimeField(auto_now_add=True)


#and this are my views.py
from django.shortcuts import render, redirect
from django.urls import reverse, reverse_lazy
from django.contrib.auth.mixins import  LoginRequiredMixin
from django.views import generic

from .forms import QuestionForm, AnwserForm
from .models import Question

# Create your views here.

class QuestionListView(LoginRequiredMixin, generic.ListView):
    template_name = 'anwserquestions/question_list.html'
    context_object_name = 'questions'

    def get_queryset(self):

        return Question.objects.all()

def createquestion(response):
    if response.method == "POST":
        print("Its POST method")
        form = QuestionForm(response.POST)
        # user =response.user
        if form.is_valid():
            name = form.cleaned_data["name"]
            description=form.cleaned_data['description'],
            question_type=form.cleaned_data['question_type'],
            # date=form.cleaned_data['date'],
            t = Question(name=name, description=description, question_type=question_type, cant_resp=0)
            t.save()
            response.user.question.add(t)  # adds the to do list to the current logged in user

            # return HttpResponseRedirect("/%i" %t.id)
            return redirect('anwserquestions:question-list')

    else:
        form = QuestionForm()

    return render(response, "anwserquestions/question_create.html", {"form":form})

    
class QuestionDetailView(LoginRequiredMixin, generic.DetailView):
    model = Question
    template_name = 'anwserquestions/question_detail.html'
    context_object_name = 'question'

    def get_queryset(self):
        return Question.objects.all()


class QuestionDeleteView(LoginRequiredMixin, generic.DeleteView):
    template_name = 'anwserquestions/question_delete.html'
    context_object_name = 'question'
    success_url = reverse_lazy('anwserquestions:question-delete')

    # def get_queryset(self):

    #     return Question.objects.all()


【问题讨论】:

  • 我假设问题和答案模型共享某种关系,这就是您需要关注的地方。但是,如果您出示您的 model.pyviews.py 也会有所帮助,这将有助于我们了解您到目前为止所做的工作并做出适当的投入。
  • 我让你我的模型和我的观点如果你能帮助我,我非常感激,我看到了其他解决方案,但没有用

标签: django django-views django-class-based-views


【解决方案1】:

您可以通过将其包含在视图上下文中来获取相关的answers,因此您的QuestionDetailView 变为

class QuestionDetailView(LoginRequiredMixin, generic.DetailView):
    model = Question
    template_name = 'anwserquestions/question_detail.html'
    context_object_name = 'question'

    def get_context_data(self, **kwargs):
        context = super(QuestionDetailView, self).get_context_data(**kwargs)
        context['answers'] = Answer.objects.filter(post=self.get_object())
        return context

【讨论】:

  • 不客气,很高兴我能帮上忙。你能接受这个答案是正确的吗?
猜你喜欢
  • 2020-03-06
  • 2021-01-02
  • 2017-05-08
  • 2012-12-31
  • 2013-03-25
  • 1970-01-01
  • 2015-04-18
  • 2018-04-13
  • 2018-03-05
相关资源
最近更新 更多