Отображение значения Django ForeignKey в шаблоне - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь показать значение 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 %}

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Это одна из многих причин, почему вы должны не использовать .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<b>.body_part.body_part</b> }}</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 <b>__str__</b>(self):
        return self.body_part

, а затем отобразить это с помощью:

{% for exercise in exercises %}
<span class="post-meta-category"><a href="">{{ exercise<b>.body_part</b> }}</a></span>
      <div class="post-item-description">
        <a href="">{{ exercise.title }}</a>

        <p>{{ exercise.content }}</p>
{% endfor %}
0 голосов
/ 20 февраля 2020

в вашей модели упражнений, игнорируйте часть по умолчанию. (Можно показать любое сообщение, которое говорит пользователям "no body_part", такое как {% if not exerc.body_part%} -> Ничего не показывать) и убедитесь, что вы иметь значение в вашем exerc.body_part. Это означает, что в вашей модели BodyPart должен быть объект по отношению к текущему объекту этой модели.

также это должен быть {{exerc.body_part.body_part}} второй - извлечь значение связанных объектов BodyPart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...