我在写博客。在它的第一页,我想显示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
时,一切正常,但我需要它来防止重复。
我们怎样才能解决这个问题?谢谢!
发布于 2018-04-24 03:13:53
id__in
需要一个整数集合,因为id
列是整数类型的。因此,您必须从id
中提取data1
列
id__in=[post.id for post in data1]
编辑:这是必要的,因为您将QuerySet从第一行转换为Python列表。但是,请参阅https://docs.djangoproject.com/en/2.0/ref/models/querysets/#in和order_by('?')
--最好不要比必须更快地将QuerySet
转换为列表,因为直接组合QuerySet
将生成不将整个表提取到内存中的QuerySet
。
https://stackoverflow.com/questions/50000152
复制相似问题