How to get two random records with Django

Viewed 14951

How do I get two distinct random records using Django? I've seen questions about how to get one but I need to get two random records and they must differ.

7 Answers

from django.db import models
from random import randint
from django.db.models.aggregates import Count


class ProductManager(models.Manager):
    def random(self, count=5):
        index = randint(0, self.aggregate(count=Count('id'))['count'] - count)
        return self.all()[index:index + count]

You can get different number of objects.

class ModelName(models.Model):

    # Define model fields etc


    @classmethod
    def get_random(cls, n=2):
        """Returns a number of random objects. Pass number when calling"""

        import random
        n = int(n) # Number of objects to return
        last = cls.objects.count() - 1
        selection = random.sample(range(0, last), n)
        selected_objects = []
        for each in selection:
            selected_objects.append(cls.objects.all()[each])
        return selected_objects
Related