Skip to main content
 首页 » 编程设计

python之Django ORM之获取 N 条随机记录,然后将它们分成 2 组

2024年08月16日28oomusou

我有一个 Post 模型:

class Post(models.Model): 
    headline = models.CharField(max_length=255) 
    ... 

我试图实现的目标是随机分组,每组 5 个帖子,其中第二组记录第一组没有的帖子。

现在我知道如何使用 Python 来做到这一点,但我想知道是否有更优雅、类似 ORM 的解决方案。

我尝试了以下方法:

posts = Post.objects.all().order_by('?') 
first_group = posts[:5] 
second_group = posts[5:] 

但这有时会在两个组中返回相同的帖子。

我还试图欺骗系统执行以下操作:

posts = Post.objects.all().order_by('?') 
first_group = posts[:5] 
second_group = Post.objects.exclude(id__in=first_group) 

但还是没有运气。

有人可以给我一些指示,这样我就不必在纯 Python 中循环遍历记录了吗?

请您参考如下方法:

要获得独特的帖子,您可以:

posts = list(Post.objects.all().order_by('?')[:10]) 
first_group = posts[:5] 
second_group = posts[5:] 

这具有进行单个数据库查询的额外优势。