我有一些post模型,其中ID是UUID。 现在,我想显示一些随机张贴的建议,用户可能也喜欢在我的张贴详细模板看到
这是我处理用户可能也希望在views.py上看到的帖子建议的方式:
def post_proposals():
post_elements = sorted(
chain(
Model1.objects.all(),
Model2.objects.all(),
Model3.objects.all()
)
)
post_elements_list = list(post_elements) # Conversion to list is requierd by random
post_proposals = random.sample(post_elements_list)
return post_proposals
def post_detail(request, pk):
...
args = {
'post': post,
'post_proposals': post_proposals(),
...
template.html:
{% for post_proposal in post_proposals %}
<h1>{{ post_proposal.title }}</h1>
{% endfor %}
现在的问题是,从我的理解来看,这会破坏我的数据库性能。。。一旦我的数据库中存储了大量帖子,查询就会变得庞大。我首先要获取3个模型的所有元素,然后每次向用户显示帖子时,从列表中随机获取10个条目
我还发现以下内容似乎非常有用:
https://elpenia.wordpress.com/2010/05/11/getting-random-objects-from-a-queryset-in-django/
遗憾的是,我不能使用这个解决方案,因为我使用的UUID是非顺序字符串,而不是ID的int值
问题是你有不同的型号,这使得操作非常昂贵。 我建议您添加一个新模型,其中所有要查询的模型都注册为外键或id/类型对。这样,您就可以绕过设计缺陷
仅拉动ID: model.objects.all().values\u list('id',flat=True)。 random.sample的结果将是id,您可以直接使用id拉帖子
生成新表的1到count()之间的随机范围,然后通过处理具有相应索引的记录来提取实际的POST。这需要您添加一个索引字段,因为id可能不是连续的(删除和填充)
获得id后,您可以使用model.objects.filter(id\uuuu in=post\u建议书)提取集合并进一步处理它
-编辑示例实现-
环绕其他模型的模型将如下所示:
例如,您可以尝试让数据库随机排序,然后切片
^{} 文档警告说,这可能代价高昂且速度缓慢,但可能值得进行测试,看看它在实践中是否给出了可接受的结果
相关问题 更多 >
编程相关推荐