我有一个名为AffectedSegment
的模型,用于存储体罚片段。
class AffectedSegment(models.Model):
SEGMENTO_ESCAPULA = 'Escápula'
SEGMENTO_HOMBRO = 'Hombro'
SEGMENTO_CODO = 'Codo'
SEGMENTO_ANTEBRAZO = 'Antebrazo'
SEGMENTO_CARPO_MUNECA = 'Carpo/Muñeca'
SEGMENTO_MANO = 'Mano'
SEGMENT_CHOICES = (
(SEGMENTO_ESCAPULA, u'Escápula'),
(SEGMENTO_HOMBRO, u'Hombro'),
(SEGMENTO_CODO, u'Codo'),
(SEGMENTO_ANTEBRAZO, u'Antebrazo'),
(SEGMENTO_CARPO_MUNECA, u'Carpo/Muñeca'),
(SEGMENTO_MANO, u'Mano'),
)
affected_segment = models.CharField(
max_length=12,
choices=SEGMENT_CHOICES,
verbose_name='Affected Segment'
)
def __str__(self):
return "%s" % self.affected_segment
我有另一个名为Movement
的模型,用于存储与之前输入的下一个体段相关或相关的运动。
这个想法是一个段(AffectedSegment
对象)可以有很多移动,一个移动(Movement
对象)可以与一个或多个段相关联。
class Movement(models.Model):
type = models.CharField(
max_length=255,
verbose_name='Movement type'
)
corporal_segment_associated = models.ManyToManyField(
AffectedSegment,
blank=True,
verbose_name='Affected segment associated')
def __str__(self):
return "%s" % self.type
这两个模型,我在这个模型中引用
class RehabilitationSession(models.Model):
affected_segment = models.ManyToManyField(
AffectedSegment,
verbose_name='Segmento afectado',
#related_name='affectedsegment'
)
movement = models.ManyToManyField(
Movement, # Chained Model
verbose_name='Movement',
#related_name = 'movement'
)
我的主要疑问是如何在我的html模板中查找来自affected_segment
模型的movement
和RehabilitationSession
字段的内容。
我正在尝试以这种方式传递这些数据:
我的views.py文件
class RehabilitationSessionList(ListView):
queryset = RehabilitationSession.objects.all()
context_object_name = 'rehabilitationsessions'
template_name = 'finals_list.html'
我的finals_list.html模板是:
<thead>
<tr>
<th>Affected Segment</th>
</tr>
</thead>
<tbody>
{% for a in rehabilitationsessions %}
<tr>
<td>{{ a.affected_segment }}</td>
</tr>
</tbody>
{% endfor %}
但是当我通过网址访问我的模板时,我得到了这个:
当然,RehabilitationSession
模型没有显式声明affected_segment
和movement
字段,因为ManyToMany关系以这种方式创建了另一个中间模型/表:
通过Django Shell,我可以进行查询,浏览一些表/模型
In [21]: RehabilitationSession.objects.filter(movement__type='Extensión')
Out[21]: <QuerySet [<RehabilitationSession: Andrea Vermaelen>]>
In [24]: RehabilitationSession.objects.filter(affected_segment__affected_segment='Codo
...: ')
Out[24]: <QuerySet [<RehabilitationSession: Andrea Vermaelen>]>
我的问题是如何在数据视图中查看数据中的查询,
我的模型可能没有正确定义吗? ...
我知道这不应该是复杂的,但是我希望得到一些关于它的方向,以便在康复过程中检索一个人的片段和动作。
欢迎任何方向
更新
关于@ Daniel-Roseman给我的支持,我还提取了将其附加在表格中的移动字段。
{% for a in rehabilitationsessions %}
{% for r in a.affected_segment.all %}
{% for l in a.movement.all %}
<tr>
<td>{{ a.id }}</td>
<td>{{ a.patient.full_name }}</td>
<td>{{ a.patient.user.birth_date }}</td>
<td>{{ a.patient.user.age }}</td>
<td>{{ a.patient.user.sex }}</td>
<td>{{ a.upper_extremity }} <br/><br/>
<strong>{{ a.pain_extremity }}</strong> </td>
<td>{{ a.patient.dominant_superior_member }}</td>
<td>{{ r.get_affected_segment_display }}</td>
<td>{{ l }}</td>
<td> <button type="button" class="btn btn-xs btn-info"><a href="{% url 'rehabilitationsessions:detail' a.id %}">Ver</a></button></td>
<td><a href="{% url 'rehabilitationsessions:edit' a.id %}">Editar</a></td>
</tr>
{% endfor %}
{% endfor %}
{% endfor %}
它所展示的运动。作品。
但是,当我编辑注册表以添加一些额外的movement
或其他affected_segment
时,行为就会显示此附加段或移动的新记录,尽管它不是新记录在数据库中,是同一记录的新行......
我认为这是因为我的三个for循环... 这是https://cldup.com/JRKuSRFPuD.png
之类的东西答案 0 :(得分:1)
正如您所说,affected_segment
是一个多对多字段。这意味着它引用许多段(并且名称似乎错误,它应该是复数)。所以你不能只输出它,你需要遍历它:
{% for a in rehabilitationsessions %}
{% for r in a.affected_segment.all %}
{{ r.get_affected_segment_display }}
{% endfor %}
{% endfor %}
请注意,由于您对AffectedSegment感兴趣的字段(本身称为affected_segment
)已分配选项,因此您可以使用get_affected_segment_display
来显示所选内容的可读值。