我想在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
.
.
.
我该怎么办?谢谢!
您无需在get_context_method
中覆盖ClassroomDetailView
。您需要做的只是在模板中:
{% for student in object.student_set.all %}
<h4>name : {{ student.studentname }}</h4>
<h4>number : {{ student.number }}</h4>
{% endfor %}
这里我使用ClassRoom
使用Student
和related objects
模型之间的反向关系。