首页 > 解决方案 > 我的文章首先显示最旧的,但我希望它首先显示新文章,如日期明智的新文章应该出现在顶部

问题描述

嗨,我想展示我的文章最新文章应该首先出现我在模型中使用了 Meta 类,但它不工作它没有显示任何错误,但它在顶部显示旧文章。如果有人可以请帮助,那将非常有帮助

模型.py

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone


class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField()
    body = models.TextField()
    date = models.DateTimeField(default=timezone.now)
    thumb = models.ImageField(default='default.png', blank=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)

    class Meta:
        ordering = ['-date']

    def __str__(self):
        return self.title

    def snippet(self):
        return self.body[:100]+'...'

视图.py

from django.http import HttpResponse
from django.shortcuts import render, redirect
from .models import Article
from django.contrib.auth.decorators import login_required
from . import forms


def article_list(request):
    articles = Article.objects.all().order_by('date')
    return render(request, 'articles/article_list.html', {'articles': articles})


def article_detail(request, slug):
    # return HttpResponse(slug)
    article = Article.objects.get(slug=slug)
    return render(request, 'articles/article_detail.html', {'article': article})


@login_required(login_url="/accounts/login/")
def article_create(request):
    if request.method == 'POST':
        form = forms.CreateArticle(request.POST, request.FILES)
        if form.is_valid():
            # save article to db
            instance = form.save(commit=False)
            instance.author = request.user
            instance.save()
            return redirect('articles:list')
    else:
        form = forms.CreateArticle()
    return render(request, 'articles/article_create.html', {'form': form})

标签: pythondjangopython-3.x

解决方案


在您的 article_list 视图中,您按日期升序(最旧的优先)排序,这将覆盖您的模型 Meta。要么将其更改为 -date,要么仅删除 order_by 以回退到 Meta 排序。


推荐阅读