Пытаюсь показать последнюю запись - Джанго - PullRequest
0 голосов
/ 19 апреля 2019

Модель

class Category(models.Model):
    class Meta():
        verbose_name_plural = "Categories"

    cat_name = models.CharField(max_length=50)
    description = models.TextField()

    def get_forums(self):
        get_forum = Forum.objects.filter(category=self)
        return get_forum

    def __str__(self):
        return f"{self.cat_name}"

class Forum(models.Model):
    class Meta():
        verbose_name_plural = "Forums"

    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="forums")
    parent = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE)
    forum_name = models.CharField(max_length=50)
    description = models.TextField()

    def __str__(self):
        return f"{self.forum_name}"

class Thread(models.Model):
    class Meta():
        verbose_name_plural = "Threads"
        get_latest_by = "date_posted"

    forum = models.ForeignKey(Forum, on_delete=models.CASCADE, related_name="threads")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f"{self.title} by: {self.author}"

View

class Home(ListView):
    model = Category
    template_name = 'forums/index.html'
    context_object_name = 'category'

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        # Add in a QuerySet of all the Cat 
        context['category'] = Category.objects.all()
        return context

HTML

{% block content %}
{% for cat in category %}
    <div style="padding-top: 20px;">
        <div class="row">
            <div class="bg-success rounded-top border border-dark" style="width:100%; padding-left:8px;">
                <a href="{% url 'catview' cat.id %}"> {{ cat.cat_name }}</a>
            </div>
        </div>

        {% for forum in cat.forums.all %}
            <div class="row">
                <div class="bg-secondary border border-dark" style="width:100%; padding-left:16px;">
                    <a href="{% url 'forumview' forum.id %}"> {{ forum.forum_name }}</a>

                    {% for threads in forum.threads.all %}
                        <div class="float-right" id="latest-post">
                            <p>{{ threads.title }}</p>
                            <p> <a href="#"> {{ threads.author.username }} </a></p>
                        </div>
                    {% endfor %}

                </div>
            </div>
        {% endfor%}
    </div>
{% endfor %}
{% endblock content %}

Задача

Я создаю форумы и пытаюсь заставить мою домашнюю страницу показывать последнее сообщение на форуме.

У меня все работает, чтобы показать все темы, но я просто хочу, чтобы самая последняя была показана в последнем сообщении div.

Я настроил get_latest_by для модели Thread, чтобы она получала последнюю версию к моменту создания.

Как бы я мог получить это, чтобы отобразить последнюю тему?

1 Ответ

1 голос
/ 19 апреля 2019

Вы можете установить свойство в модели Form, а затем вызвать его в шаблоне.

views.py

class Form(models.Model):
    ...

    @property
    def get_newest_thread(self):
        return self.threads.all().order_by('date_posted').first()

HTML

            {% with threads=forum.get_newest_thread %}
                <div class="float-right" id="latest-post">
                    <p>{{ threads.title }}</p>
                    <p> <a href="#"> {{ threads.author.username }} </a></p>
                </div>
            {% endwith %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...