在列表中排序 (order_by)

Sorting (order_by) in list

我正在构建一个博客应用程序,我正在尝试 sortorder_by 包含多个查询的列表。

models.py

class BlogPost(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    date = models.DateTimeField(auto_now_add=True)

class Comments(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    blog_of = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    body = models.CharField(max_length=30, default='')
    date_added = models.DateTimeField(auto_now_add=True)

views.py

def mypage(request):
    query_1 = list(BlogPost.objects.filter(user=request.user).order_by('-date'))

    query_2 = list(Comment.objects.filter(user=request.user).order_by('date_added'))


    results = sorted(chain(query_1, query_2),key=attrgetter('date') , reverse=True)

    context = {'results':results}
    return render(reques, 'mypage.html', context)

但是正在显示

'Comment' object has no attribute 'date'

而且我认为这是因为两个模型中的日期字段名称不同,而我只使用一个进行排序,但我不知道如何使用不同的字段名称进行排序。

非常感谢任何帮助。谢谢

或将其添加为 属性:

class Comments(models.Model):  # do NOT give a model a plural name!
    # ....
    @property
    def date(self):
        return self.date_added
        # or if it is a datetimefield
        # return self.date_added.date()

此外,您还可以编写更加自定义的排序键(例如,以防涉及的模型来自第三方应用程序)。

def order(obj):
    try:
        return obj.date
    except AttributeError:
        return obj.date_added

# ...
results = sorted(chain(query_1, query_2), key=order, reverse=True)