Django - 组合多个变量

时间:2018-04-24 11:07:30

标签: python django

我正在写博客。在它的第一页,我想展示4个随机博客文章& 6篇最新博文!

这就是我的所作所为:

# 4 random posts
data1 = sorted(Blog.objects.all(), key=lambda x: random.random())[:4] 

# 6 latest posts (excluding the random ones)
data2 = Blog.objects.exclude(id__in=data1).order_by('-id')[:6]

# all blogs
results = list(chain(data1, data2))

但上面的代码引发了错误:int() argument must be a string, a bytes-like object or a number, not 'Blog'

当我从.exclude(id__in=data1)删除data2时,一切正常,但我需要它以防止重复。

我们如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:3)

\n需要一个整数集合,因为id__in列是整数类型。因此,您必须从id

中提取id
data1

编辑:这是必要的,因为您将QuerySet从第一行转换为Python列表。但是,请参阅https://docs.djangoproject.com/en/2.0/ref/models/querysets/#inid__in=[post.id for post in data1] - 最好不要将order_by('?')更快地转换为列表,因为直接编写QuerySet将生成不具备的QuerySet将整个表格取回内存。