from django.db import models

import random

class RandomQueryset(models.query.QuerySet):
    """Custom queryset"""
    
    def randomize(self):
        """Returns random object from given model
         without 'shot the foot' ['?'][0]"""       
        count = self.count()
        random_index = random.randint(0, count - 1)
        return self.all()[random_index]


class RandomManager(models.Manager):
    """Custom manager, returns RandomQueryset instance. 
    Usable for related objects, required to be defined as default manager."""
    
    use_for_related_fields = True
    
    def get_query_set(self):
        return RandomQueryset(self.model, using=self._db)
    
    def randomize(self):
        return self.get_query_set().randomize()


In use:

In [1]: from myapp.models import PostPages
In [2]: post = PostPages.objects.filter(image_gallery__isnull=False).distinct().randomize()
In [3]: post.image_gallery.randomize()
Out[3]: <Image: /site_media/media/img/vkrasa_gomukhasana.jpg>