如何从Detailview中的另一个模型获取数据?

问题描述 投票:0回答:1

我想在detailview中的另一个模型中获取数据。

我有两个模型,分别是教室模型和学生模型。

My model

class Classroom(models.Model):
   roomname = models.CharField(max_length=255)
   number = models.IntegerField(default=0)
   roomlogo = models.ImageField()

   def preview(self, request):
    return render_to_string(
        "classroom /classroom_preview.html", {"classroom": self}
    )

   def __str__(self):
      return self.roomname 

class Student(models.Model):
    studentname = models.CharField(max_length=255)
    number = models.CharField(max_length=255)
    picture = models.ImageField(blank=True)
    classroom= models.ForeignKey(Classroom, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return self.studentname 

我的urls.py

urlpatterns = [
    path("", ClassroomListView.as_view(), name="class"),
    path("<str:slug>", ClassroomDetailView.as_view(), name="classroom"),
]

我的view.py

class ClassroomListView(ListView):
   model = Classroom

class ClassroomDetailView(DetailView):
   model = Classroom

  def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context["student_in_room"] = Student.objects.all() 

    return context

我的教室_preview.html

<a href="{% url 'classroom' classroom.slug %}" class="link-wrapper">
    <div style="padding: 0.5rem;" class="center">
        <h5>{{ classroom.roomname }}</h5>
    </div>
</a>

我的教室_detail.html

{{ object.roomname }} // name classroom //
{% for student in student_in_room %}
     <h4>name : {{ student.studentname }}</h4>
     <h4>number : {{ student.number }}</h4>        
{% endfor %}

我的问题是每个教室都有重复的学生。

考试显示

// When clicked science room 
SCIENCE ROOM

[ this picture ]    name : nanny   number : 1
[ this picture ]    name : lily    number : 2
[ this picture ]    name : john    number : 1
[ this picture ]    name : pink    number : 2

// When clicked math room 
MATH ROOM

[ this picture ]    name : nanny   number : 1
[ this picture ]    name : lily    number : 2
[ this picture ]    name : john    number : 1
[ this picture ]    name : pink    number : 2

我想在教室里显示学生信息。

样品显示

// When clicked science room 
SCIENCE ROOM

[ this picture ]    name : nanny   number : 1
[ this picture ]    name : lily    number : 2
.
.
.

// When clicked math room 
MATH ROOM

[ this picture ]    name : john    number : 1
[ this picture ]    name : pink    number : 2
.
.
.

我该怎么办?谢谢!

python django view
1个回答
0
投票

您无需在get_context_method中覆盖ClassroomDetailView。您需要做的只是在模板中:

{% for student in object.student_set.all %}
     <h4>name : {{ student.studentname }}</h4>
     <h4>number : {{ student.number }}</h4>        
{% endfor %}

这里我使用ClassRoom使用Studentrelated objects模型之间的反向关系。

© www.soinside.com 2019 - 2024. All rights reserved.