Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django从数据库中获取随机对象_Django_Django Models_Django Rest Framework_Django Queryset - Fatal编程技术网

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

我有一个包含一百万个以上列的数据库,我想从该数据库返回100个随机对象

在网上搜索解决方案后,我发现关于['?']方法及其替代方案(甚至在Django官方文档中!)的
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

这是已知的包裹吗?它将很好地与大型数据库和规模?我没有发现太多关于它的东西,也没有发现任何性能比较:它值得“成本”吗?(几行代码,不会花那么多钱…)