我正在写博客。在它的第一页,我想展示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
时,一切正常,但我需要它以防止重复。
我们如何解决这个问题?谢谢!
答案 0 :(得分:3)
\n
需要一个整数集合,因为id__in
列是整数类型。因此,您必须从id
id
列
data1
编辑:这是必要的,因为您将QuerySet从第一行转换为Python列表。但是,请参阅https://docs.djangoproject.com/en/2.0/ref/models/querysets/#in和id__in=[post.id for post in data1]
- 最好不要将order_by('?')
更快地转换为列表,因为直接编写QuerySet
将生成不具备的QuerySet
将整个表格取回内存。