Python Django中如何按用户写日记的时间进行排序调用

class User(object):
username=models.CharField()
xxx
pub_date = models.DateTimeField(auto_now_add=True)

class Notes(models.Modle):
author = models.ForeignKey(User)
title = models.CharField()
pub_date = models.DateTimeField(auto_now_add = True)
body = models.TextField()

两个模型,
怎么调用 最新写过日记的用户.

比如 用户 a, b,c 分别各写了几篇日记,怎么调用用户 a,b,c,以他们写日记的时间排序.
Python Django中如何按用户写日记的时间进行排序调用


6 回复

当然是用 Model 里面提供的方法来调用啊。仔细看例子。


在Django中按用户日记的创建时间排序,核心是使用模型的Meta类或查询时的order_by()方法。假设你的日记模型Diary有一个created_at字段(DateTimeField),并且通过ForeignKey关联到User模型。

1. 在模型层定义默认排序(推荐)Diary模型的Meta类中添加ordering属性,这样所有查询默认按时间排序。

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

class Diary(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)  # 自动记录创建时间

    class Meta:
        ordering = ['-created_at']  # 负号表示降序,即最新的在前

2. 在视图中查询特定用户的日记 在视图函数或类视图中,过滤出当前用户的日记,由于模型已定义排序,查询结果会自动按时间降序排列。

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Diary

@login_required
def user_diaries(request):
    # 获取当前用户的所有日记,自动按created_at降序排序
    diaries = Diary.objects.filter(user=request.user)
    return render(request, 'diaries/list.html', {'diaries': diaries})

3. 动态排序(如果需要调整顺序) 如果你需要在不同情况下调整排序(例如升序),可以在查询时使用order_by()覆盖默认排序。

# 按创建时间升序(旧的在前)
diaries_asc = Diary.objects.filter(user=request.user).order_by('created_at')

# 按创建时间降序(新的在前)
diaries_desc = Diary.objects.filter(user=request.user).order_by('-created_at')

总结:在模型Meta中设置ordering是最干净的做法。

上面是两个模型,应该在哪个模型下写?

notes = Notes.objects.filter(author=a,b,c).order_by(-‘pub_date’)

如果调用最新 10 篇用户文章 notes = Notes.objects.all().order_by(-‘ pub_date ’)[:10]

这样调出来的是最新的日记吧?
我的意思是,哪个用户刚刚写了日记,他的排名就在最前面,
根据这个得到前5个或10个最新写了日记的用户.这样子

回到顶部