假设我在 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
中获得所有的Review
和Rating
。
对于更不同的模型(或更简单的实现(,只需执行两个查询,就像您现在一样,并像这样合并 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