我在Django中有两个模型:Room
用于办公室,Person
用于雇员。一个办公室可以有多名员工。我正在尝试制作一个详细视图的html页面,该页面显示一个人的详细信息,例如其姓名和办公室号码。我可以很好地从Person
模型中获取详细信息,但是在对Room
模型进行反向查找时遇到了麻烦。输入以下代码,如何获得一个人的办公室?
#models.py
class Room(models.Model):
number = models.CharField('Room number', unique=True)
persons = models.ManyToManyField('Person', blank=True)
#...
class Person(models.Model):
name = models.CharField('Full name', max_length=200)
#...
#views.py
from django.views import generic
class PersonDetailView(generic.DetailView):
model = Person
#person_detail.html
{% extends "base_generic.html" %}
{% block content %}
<h1>Name: {{ person }}</h1>
<p>Room: {{ Room.number }}</p>
{% endblock %}
当前所做的只是返回一个名称,但“房间”留为空白。
答案 0 :(得分:1)
您可以重载get_context_data
方法
class PersonDetailView(DetailView):
model = Person
context_object_name = 'person'
template_name = 'person_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# woops, typo
# context['room'] = Room.objects.filter(person=context['object']).first()
context['room'] = Room.objects.filter(persons=context['object']).first()
return context
和模板:
#person_detail.html
{% extends "base_generic.html" %}
{% block content %}
<h1>Name: {{ person }}</h1>
<p>Room: {{ room.number }}</p>
{% endblock content %}
编辑:
但是,Person
指向models.ForeignKey
的{{1}}可能会更好,因此Room
只能有一个Person
,但可以有许多{{1 }}可以具有相同的Room
。
然后您可以保留原始视图并更改模板:
Person