我正在尝试在模板中显示模型的ForeignKey值,所有其他字段显示都很好,但是我无法使其正常工作。这是我的代码:
models.py:
class BodyPart(models.Model):
body_part = models.CharField(max_length=20, unique = True)
class Exercise(models.Model):
body_part = models.ForeignKey(BodyPart, on_delete=models.CASCADE, default = "bodypart", related_name="bodypart")
views.py:
exercises = Exercise.objects.filter(category=exercisedetailcategory).values()
context = {
"exercises" : exercises,
}
return render(request,"exercises-categories.html",context)
模板:
{% for exercise in exercises %}
<span class="post-meta-category"><a href="">{{exercise.body_part}}</a></span>
<div class="post-item-description">
<a href="">{{exercise.title}}</a>
<p>{{exercise.content}}</p>
{% endfor %}
答案 0 :(得分:1)
这是您不使用.values()
的众多原因之一。如果传递Exercise
模型,则可以将相关对象提取到内存中。您可以使用.select_related(..)
来优化查询:
exercises = Exercise.objects.filter(
category=exercisedetailcategory
).select_related('body_part')
context = {
'exercises' : exercises,
}
return render(request, 'exercises-categories.html', context)
然后在模板中,我们可以使用以下方式呈现该信息:
{% for exercise in exercises %}
<span class="post-meta-category"><a href="">{{ exercise.body_part.body_part }}</a></span>
<div class="post-item-description">
<a href="">{{ exercise.title }}</a>
<p>{{ exercise.content }}</p>
{% endfor %}
您还可以为__str__
实现BodyPart
方法:
class BodyPart(models.Model):
body_part = models.CharField(max_length=20, unique=True)
def __str__(self):
return self.body_part
,然后使用以下内容呈现:
{% for exercise in exercises %}
<span class="post-meta-category"><a href="">{{ exercise.body_part }}</a></span>
<div class="post-item-description">
<a href="">{{ exercise.title }}</a>
<p>{{ exercise.content }}</p>
{% endfor %}
答案 1 :(得分:0)
在您的运动模型中,忽略默认部分。(可能显示任何告诉用户“ no body_part”的消息,例如 {%,如果不是exercise.body_part%}->无显示 并确保您在exercise.body_part中有一个值,这意味着您必须在BodyPart模型中有一个与此模型的当前对象相关的对象。
也应该是{{exercise.body_part.body_part}} 第二个是提取相关BodyPart对象的值