Django - как получить последний элемент из запроса в шаблоне - PullRequest
1 голос
/ 26 мая 2020

Я полный новичок в Django и не могу сделать что-то базовое; ссылка на последний (или первый) элемент в базе данных.

Для начала - это модель, с которой я работаю:

class Artwork(models.Model):
    date = models.DateField(auto_now_add=True)
    art = models.ImageField(upload_to='artworks/%Y')
    title = models.CharField(max_length=200)
    description = models.TextField(null=True, blank=True)
    herochoices = [('left', 'left'), ('middle', 'middle'), ('right', 'right')]
    hero = models.CharField(choices=herochoices, max_length=6, null=True, blank=True, unique=True, error_messages={'unique':'Another artwork already uses this hero position.'})  
    slug = slugify(title, allow_unicode=False)

    def __str__(self):
        return self.title

    def get_absolute_urls(self):
        return reverse('artwork_list', kwargs={'slug': self.slug})

Я создал следующий набор запросов в моем представлении:

class ArtworkDetailView(DetailView):
    model = Artwork
    template_name = 'artwork_detail.html'
    qs = Artwork.objects.all()

И теперь внутри моего шаблона я пытаюсь предоставить ссылку на последний элемент в наборе запросов. Однако я понятия не имею, чем заполнить атрибут href, чтобы предоставить такую ​​ссылку:

{% extends 'base.html' %}

{% block content %}

    <h1>{{ artwork.title|title}}</h1>
    <div class="row">

        <div class="col-sm-1 float-left">
            <p class="arrows">
                {% if artwork.get_previous_by_date.id == '' %}
                        <a href="{{ ????? }}">
                {% else %}
                    <a href="/artwork/{{ artwork.get_previous_by_date.id }}/{{ artwork.get_previous_by_date.title }}/">
                {% endif %}
                    <span class="material-icons" style="font-size: 30pt">keyboard_arrow_left</span>
                </a>
            </p>
        </div>

Я проверил, что условие if работает нормально, поместив URL-адрес на https://www.google.com там, что отлично работает. Моя проблема на самом деле заключается в том, чтобы получить абсолютный URL-адрес последнего элемента в наборе запросов в моем шаблоне.

Спасибо,

Jon

1 Ответ

1 голос
/ 26 мая 2020

Вы можете получить .latest(&hellip;) или .last(), переопределив метод get_object:

class ArtworkDetailView(DetailView):
    model = Artwork
    template_name = 'artwork_detail.html'

    def get_object(self, queryet=None):
        if queryset is None:
            queryset = self.get_queryset()
        return queryset<b>.latest('date')</b>

Или вы можете использовать специальный метод:

class ArtworkDetailView(DetailView):
    model = Artwork
    template_name = 'artwork_detail.html'

    def <b>latest_artwork</b>(self):
        return Artwork.objects<b>.latest('date')</b>

и визуализировать это в представлении с:

<a href="{{ <b>view.latest_artwork.get_absolute_url</b> }}">

Обратите внимание, что вы допустили опечатку в своей модели, это get_absolute_url, а не get_absolute_urls.

...