Как сделать страницу, на которой всегда будут отображаться последние сообщения из моей модели Django? - PullRequest
0 голосов
/ 30 июня 2019

Спасибо всем людям, которые смотрели на это заранее! Я действительно ценю это.

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

models.py

class Post(models.Model):
title = models.DateField(blank=True, null=True)
body = models.TextField()

def __str__(self):
    return str(self.title)

После выполнения стандартного «создания блога в учебнике по Django» я создал два представления, которые показывают список всего опубликованного и представление, которое отображает детали любого выбранного сообщения.

views.py

class NowListView(ListView):
model = Post
template_name = 'archive.html'

class NowDetailView(DetailView):
model = Post
template_name = 'then.html'

Наконец, у меня есть этот urls.py, который успешно показывает все сообщения на http://127.0.0.1:8000/now/archive и конкретный пост на http://127.0.0.1:8000/now/archive/1 (или любое другое число, в зависимости от pk ).

urls.py

urlpatterns = [
    path('archive', NowListView.as_view(), name='archive'),
    path('archive/<int:pk>', NowDetailView.as_view(), name='then'),
        ]

Чего я хочу добиться, так это отображать последнее сообщение на http://127.0.0.1:8000/now.

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

Я пытался использовать этот Post.objects.earliest ('title') и этот Post.objects.order_by ('title'). First () в моих URL как таковых:

urls.py

    urlpatterns = [
path('archive', NowListView.as_view(), name='archive'),
path('archive/<int:pk>', NowDetailView.as_view(), name='then'),    
path('>',NowDetailView.as_view(Post.objects.order_by('title').first()), name='then'),
        ]

Это дает мне ошибку:

TypeError: as_view() takes 1 positional argument but 2 were given

Я также пытался создать функцию def под моим классом в views.py, но ошибка тогда заключалась в том, что URL-адреса не могли импортировать ее по какой-то причине.

В любом случае, я, наверное, слишком обдумываю это и просто глупо. Если бы кто-нибудь мог помочь мне с этим, я был бы очень благодарен! Заранее большое спасибо и простите за длинный вопрос!

Лучший, Расул Киреев

1 Ответ

0 голосов
/ 30 июня 2019

Это относится к представлению., А не к URL.

Вам нужно определить get_object:

class NowLatestView(DetailView):
    model = Post
    template_name = 'then.html'

    def get_object(self)
        return Post.objects.order_by('title').first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...