美文网首页
Django Models随机获取指定数量数据方法

Django Models随机获取指定数量数据方法

作者: Young先生 | 来源:发表于2020-07-23 16:00 被阅读0次

    方法一:新增models的Manager方法

    下面就直接发代码了

    class RandomManager(models.Manager):
        def get_queryset(self):
            return super(RandomManager, self).get_queryset().order_by('?')
    

    使用的时候

    class TrainWord(models.Model):
        '''
        User train word
        '''
        word = models.CharField(max_length=32)
     
        randoms = RandomManager()
     
        def __unicode__(self):
            return self.word
    

    数据展示时:

    words = TrainWord.randoms.all()[count]
    

    这种方式,是自己定义了一个Models的manager方法,任何一个models都可以使用此方法,具有通用性。

    方法二:查询数据时,通过order_by('?')实现

    实现代码:

    Content.objects.all().order_by('?')[:100]
    

    我们可以看到这段代码就是方法一中重写Models的Manager的核心代码,都是通过models的order_by('?')来实现随机获取数据中的数据,在通过切片,实现获得指定大小的数据内容。

    注意:

    以上两种方法都存在性能瓶颈,当数据库中的数据足够大的时候,就会响应特别慢。

    方案三:通过随机数,来获取随机的数据

    代码:

    import random
    last = MyModel.objects.count() - 1
    
    index1 = random.randint(0, last)
    index2 = random.randint(0, last - 1)
    if index2 == index1: index2 = last
    
    MyObj1 = MyModel.objects.all()[index1]
    MyObj2 = MyModel.objects.all()[index2]
    

    具体的解释,可以看看此篇文章对于order_by('?')的讲解:https://stackoverflow.com/questions/1731346/how-to-get-two-random-records-with-django/6405601#6405601

    本文首发于BigYoung小站

    相关文章

      网友评论

          本文标题:Django Models随机获取指定数量数据方法

          本文链接:https://www.haomeiwen.com/subject/lvshlktx.html