Поля таблицы внешнего ключа django в HTML-шаблоне - PullRequest
0 голосов
/ 10 марта 2019

У меня есть две таблицы (статья, комментарий), связанные друг с другом с использованием внешнего ключа.Я хотел бы, чтобы в списке шаблонов html и некоторых полях из таблицы одна статья, но которую я создаю, не работает, здесь код:

models.py

class article(models.Model):
    name = models.CharField(max_length=100, blank=True, null=True)
    last_name = models.CharField(max_length=254)
    age = models.CharField(max_length=254)

    def __unicode__(self):
        return str(self.id)


class comment(models.Model):
    field_1 = models.CharField(max_length=100, blank=True, null=True)
    field_2 = models.CharField(max_length=254)
    field_3 = models.CharField(max_length=254)
    field_fk= models.ForeignKey('article', blank=True, null=True)

    def __unicode__(self):
        return str(self.id)

просмотров.py

def index(request):
    apps = article.objects.all()
    comments = comment.objects.all()
    return render(request, 'index.html', {'apps':apps,'comments':comments})

html template:

{% for b in apps %}
<p>{{ b.field_1 }}</p>
<p>{{ b.field_2 }}</p>
<p>{{ b.field_3 }}</p>
      {% for c in b.field_fk.comments %}
    <p>{{ c.name }},{{ c.last_name}},{{ c.age}}</p>
          {% endfor %}
{% endfor %}

в моем примере в шаблоне не отображается name, last_name и age - пустой абзац

1 Ответ

0 голосов
/ 10 марта 2019

Вы не можете получить доступ к комментариям, используя только .comments.Используйте modelname_set.В вашем случае это будет comments_set.Ваш цикл for будет выглядеть следующим образом:

{% for c in b.field_fk.comment_set.all %}
    <p>{{ c.name }},{{ c.last_name}},{{ c.age}}</p>
{% endfor %}

Кроме того, вы не зацикливаете правильную модель.apps установлен в Article, но в вашем шаблоне вы используете поля Comment (field_1, field_2 ...).Первая часть должна быть:

{% for article in apps %}
    <p>{{ article.name}}</p>
    <p>{{ article.last_name}}</p>
    <p>{{ article.age}}</p>
...

Поскольку статья является основным циклом, вы не должны использовать внешний ключ.Цикл должен использовать comment_set напрямую:

{% for comment in b.comment_set.all %}
    <p>{{ comment.field_1 }},{{ comment.field_2 }},{{ comment.field_3}}</p>
{% endfor %}
...