首页 > 解决方案 > 根据创建日期对一个列表中的两个模型进行排序

问题描述

对于一个宠物项目,我试图显示按创建日期排序的帖子和图片。现在,我可以按排序顺序显示它们,但可以分开显示(例如按排序顺序显示第一篇文章,然后按排序顺序显示图片)。

我想根据创建日期在墙上展示它们(无论是帖子还是图片)。

模型.py

class AddStatus(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE )
  status = models.TextField()
  date = models.DateTimeField(default=datetime.now)

class ImageLib(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE )
  picture = models.ImageField()
  date = models.DateTimeField(default=datetime.now)

视图.py

class ProfilePage(ListView):
  model = models.UserCreation
  context_object_name = 'profile'
    def get_context_data(self, *args, **kwargs):
      context = super(ProfilePage, self).get_context_data(*args, 
         **kwargs)
      user =self.request.user
      try:
        context['data'] = ProfileData.objects.get( user=user)
        context['add'] = AddStatus.objects.filter(user=user).order_by('-date')
        context['uploadpic'] = ImageLib.objects.filter(user=user).order_by('-date')
      except ProfileData.DoesNotExist:
        context['data']= None
        context['add']=None
        context['uploadpic'] = None
      return context

模板

{% for items in add %}
<h6 class="display-5" style="font-weight:1px"><i class="fas fa-plus-square"></i>&emsp;<strong class="capitalize">{{items.user.usercreation.fname}} {{items.user.usercreation.lname}}</strong><span style="font-size:16px; font-weight:1px"> wrote "{{items.status}}"</span>
<small style="font-size:0.7rem">&emsp;{{items.date.date}} at {{items.date.time}}</small><a style="float:right"  href="{% url 'usercreation:deletestatus' items.pk %}"><i class="fas fa-trash"></i></a></h6>
<hr>
{% endfor %}
{% for pics in uploadpic %}
<h6 class="display-5" style="font-weight:1px"><i class="fas fa-plus-square"></i>&emsp;<strong class="capitalize">{{pics.user.usercreation.fname}} {{pics.user.usercreation.lname}}</strong><span style="font-size:16px; font-weight:1px"> uploaded a picture</span>
<small style="font-size:0.7rem">&emsp;{{pics.date.date}} at {{pics.date.time}}</small><a style="float:right"  href="{% url 'usercreation:deletepic' pics.pk %}"><i class="fas fa-trash"></i></a></h6>
<img style="width:300px" src="{{pics.picture.url}}" alt="">
<hr>
{% endfor %}

标签: pythondjango

解决方案


你可以使用itertools.chain

context['ordered_instances'] = sorted(
    chain(Post.objects.all(), Picture.objects.all()),
    key=lambda instance: instance.date)

推荐阅读