Django从数据库中获取随机对象
我有一个包含一百万个以上列的数据库,我想从该数据库返回100个随机对象 在网上搜索解决方案后,我发现关于['?']方法及其替代方案(甚至在Django官方文档中!)的Django从数据库中获取随机对象,django,django-models,django-rest-framework,django-queryset,Django,Django Models,Django Rest Framework,Django Queryset,我有一个包含一百万个以上列的数据库,我想从该数据库返回100个随机对象 在网上搜索解决方案后,我发现关于['?']方法及其替代方案(甚至在Django官方文档中!)的order_有很大争议,此外,关于这个问题的大多数讨论都是从2010年开始的 所以,我想知道从Djando模型生成随机对象的最佳实践是什么。 我在Django文档中看到,它可能基于数据库本身,所以它是MySQL、PostgreSQL还是其他东西有关系吗?或者取决于后端本身(AWS RDS或其竞争对手) 这是我的模型: class B
order_有很大争议,此外,关于这个问题的大多数讨论都是从2010年开始的
所以,我想知道从Djando模型生成随机对象的最佳实践是什么。
我在Django文档中看到,它可能基于数据库本身,所以它是MySQL、PostgreSQL还是其他东西有关系吗?或者取决于后端本身(AWS RDS或其竞争对手)
这是我的模型:
class BasicPost(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
published = models.BooleanField(default=False)
created_date = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=False)
body = models.TextField(max_length=999)
media = models.ImageField(blank=True)
def get_absolute_url(self):
return reverse('basic_post', args=[str(self.pk)])
def __str__(self):
return self.title
谢谢 您可以通过['?']
像这样直接按照顺序进行排序
BasicPost.objects.order_by("?")[:100]
注意:-但是按(“?”)排序查询可能会很昂贵而且很慢,具体取决于数据库
更好的方法:
步骤1:将RandomManager添加到所需模型:
from django.db import models
from django_random_queryset import RandomManager
class BasicPost(models.Model):
objects = RandomManager()
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
# ...
第二步:使用它
queryset = BasicPost.objects.all()
queryset.random() # get one random record
queryset.random(100) # get 100 random records
这是已知的包裹吗?它将很好地与大型数据库和规模?我没有发现太多关于它的东西,也没有发现任何性能比较:它值得“成本”吗?(几行代码,不会花那么多钱…)