按模型B对模型A进行排序,返回重复项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按模型B对模型A进行排序,返回重复项相关的知识,希望对你有一定的参考价值。

我有模型称为游戏,有很多帖子由模型帖子连接。当我按照模型帖子对游戏进行排序时,它会从模型游戏返回重复项。我想知道如何在最近的发布日期显示游戏而不返回重复项。

views.朋友

from django.shortcuts import render, get_object_or_404
from library.models import Game
from .models import Post
from django.views.generic import (
ListView,
DetailView
)

# Create your views here.
def home(request):

    context = {
        'recent': Game.objects.all().order_by('-post__date_published')[:5],
        'posts': Post.objects.all(),
}
    return render(request, 'main/home.html', context)

class TitlePostListView(ListView):
    model = Post
    template_name = 'main/title_posts.html'
    context_object_name = 'posts'
    paginate_by = 5


    def get_queryset(self):
        title = get_object_or_404(Game, title=self.kwargs.get('title'))
        return Post.objects.filter(game=title).order_by('-date_published')

    def get_context_data(self, **kwargs):
        context = super(TitlePostListView, self).get_context_data(**kwargs)
        context['game'] = get_object_or_404(Game, title=self.kwargs.get('title'))
        return context

class PostDetailView(DetailView):
     model = Post

models.朋友

class Post(models.Model):
    article_title = models.CharField(max_length=100, default="Article Title Place Holder")
    content = HTMLField(default="Article Content Pace Holder")
    date_published = models.DateTimeField(default=timezone.now)
    game = models.ForeignKey('library.Game', on_delete=models.CASCADE)
    article_image = models.ImageField(default='/media/default.png')

class Game(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    cover = models.ImageField()
    cover_display = models.ImageField(default='default.png')
    developer = models.CharField(max_length=100)
答案

你在这里寻找的是distinct()

Game.objects.all().order_by('-post_set__date_published').distinct()[:5]

我也没有看到你在哪里连接PostGame,所以我假设你在其他一些你没有发布的代码中这样做,并且你当前的order_by正在工作。

以上是关于按模型B对模型A进行排序,返回重复项的主要内容,如果未能解决你的问题,请参考以下文章

按另一个具有重复项的列表对列表进行排序

按模型的属性(不是字段)对 Django QuerySet 进行排序

linux bash按'yymmdd'而不是'ddmmyy'列格式对文本文件进行排序,然后按时间排序,然后删除重复项

如何使用自定义模型类按部分按字母顺序对 tableView 中的数据进行排序?

按美元金额对 csv 列进行排序,然后删除重复项

无法使用 QSortFilterProxyModel 按角色排序按 QDateTime 对模型进行排序