Django / Python - 对共享相同属性的不同类对象进行排序



假设我在 Django 中有以下模型:

class Review(models.Model): 
    datetime = models.DateTimeField(("Date"), default=timezone.now)
class Rating(models.Model): 
    datetime = models.DateTimeField(("Date"), default=timezone.now)

我的观点是这样的:

def get_page(request, id_slug):
    context_dict = {}
    reviews = Review.objects.filter(attribute=id_slug).order_by('-datetime')
    ratings = Rating.objects.filter(attribute=id_slug).order_by('-datetime')
    context_dict['reviews'] = reviews
    context_dict['ratings'] = ratings
return render(request, 'page.html', context_dict)

我想做的是创建一个查询集,该查询集将包括 Review 和 Rating 对象,按 datetime 属性排序,如下所示:

activity =  reviewsANDratings.order_by('-datetime')
context_dict['activity'] = activity

实现这一目标的最佳方法是什么?

谢谢!

如果你的模型基本上是相同的,或者彼此的父/子,请考虑使用 Django 多态,这将让你在一个PolymorphicQuerySet中获得所有的ReviewRating

对于更不同的模型(或更简单的实现(,只需执行两个查询,就像您现在一样,并像这样合并 Python 中的项目:

reviews_and_ratings = sum([list(reviews), list(ratings)], [])
reviews_and_ratings.sort(key=lambda item: item.datetime, reverse=True)
context_dict['reviews_and_ratings'] = reviews_and_ratings

最新更新