在列表中排序 (order_by)
Sorting (order_by) in list
我正在构建一个博客应用程序,我正在尝试 sort
或 order_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)
我正在构建一个博客应用程序,我正在尝试 sort
或 order_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)