Как получить значение ключа контекста в Django? - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь запросить все топи c сообщения. Каждому сообщению принадлежат несколько топи c. Я получил это, но я не знаю, как перейти к шаблону. Это мой код В шаблоне я получил сообщения, но не могу получить доступ к темам отдельных сообщений. Спасибо за помощь.

models.py

class Post(models.Model):
    title = models.CharField(unique=True, max_length=121)
    content = models.TextField()
    published = models.DateField(default=timezone.now)

    def __str__(self):
        return self.title



class Topic(models.Model):
    topic_name = models.CharField(primary_key=True,unique=True, max_length=60)
    posts = models.ManyToManyField(Post)

    def __str__(self):
        return self.topic_name

views.py

def codinglife(request):
    posts = Post.objects.filter(topic__topic_name__contains='codinglife') #Get posts belong topic 'codinglife'
    context = {
        'posts': Post.objects.filter(topic__topic_name__contains='codinglife')
    }
    # for each post get topic this post belong many topic 
    for post in posts:
        context[post.id] = Topic.objects.filter(posts=post)

    return render(request, 'site/topiclistview.html', context)

Шаблон

{% extends "site/base.html" %}
{% block content %}
    {% for post in posts %}
        <article class="media content-section">
            <div class="media-body">
                <div class="article-metadata">
                    <small class="text-muted">{{ post.published }}</small>

                    {% comment 'need to show topic her' %}
                    {% endcomment %}

                </div>
                <h2><a class="article-title" href="#">{{ post.title }}</a></h2>
                <p class="article-content">{{ post.content }}</p>
            </div>
        </article>
    {% endfor %}
{% endblock content %}

1 Ответ

0 голосов
/ 26 марта 2020

Нет необходимости делать что-то особенное в ваших представлениях (но см. Ниже), вам просто нужно использовать обратную связь :

{% for post in posts %}
     <small class="text-muted">{{ post.published }}</small>
     <ul> 
       {% for topic in post.topic_set.all %}
       <li>{{ topic.name }}</li>
       {% endfor %}
     </ul>
      <h2><a class="article-title" href="#">{{ post.title }}</a></h2>
        <p class="article-content">{{ post.content }}</p>
{% endfor %}

Теперь это можно немного оптимизировать, используя select_related, по вашему мнению, чтобы избежать выполнения запросов 1 + N дБ.

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