python - 我的文章首先显示最旧的,但我希望它首先显示新文章,如日期明智的新文章应该出现在顶部
问题描述
嗨,我想展示我的文章最新文章应该首先出现我在模型中使用了 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})
解决方案
在您的 article_list 视图中,您按日期升序(最旧的优先)排序,这将覆盖您的模型 Meta。要么将其更改为 -date,要么仅删除 order_by 以回退到 Meta 排序。