首页 > 解决方案 > 显示来自 2 个表的数据并对其进行排序

问题描述

我有 2 个具有相同字段的表:

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

class Post2(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

我在同一页面上显示它们:

def home(request):
    context = {
        'posts': Post.objects.all(),
        'post2': Post2.objects.all()
    }
    return render(request, 'home.html', context)

我在html中使用它:

  {% for post in posts %}
    <p>{{ post.title }}</p>
  {% endfor %}
  {% for post in post2 %}
    <p>{{ post2.title }}</p>
  {% endfor %}

我想做的是根据发布的日期显示它们。目前它正在这样做,但表格没有混合。首先显示Post按日期排序的表格中的帖子,然后显示Post2基于日期的表格中的帖子。有没有办法按日期排序,但考虑到两个表,所以两个表中的帖子会混合并按日期显示?

标签: pythondjangosqlite

解决方案


尝试使用union

def home(request):

    posts = Post.objects.all()
    posts2 = Post2.objects.all()

    posts_together = posts.union(posts2, all=True).order_by() 
    #all=True to allow duplicates
    
    # you can use order_by() with date 
    
    context = {
        'posts_together': posts_together
    }
    return render(request, 'home.html', context)

这是关于联合的文档


推荐阅读