from .models import Track, Vote from random import choice, seed def from_json(cls, json): try: return cls.objects.get(pk=json["id"]) except cls.DoesNotExist: keys = [f.name for f in cls._meta.get_fields()] subset = {key:json[key] for key in set(keys) & set(json.keys())} return cls.objects.create(**subset) def get_unvoted(user): """Gets next voting track for user. Returns a pair with track and flag if this was a skipped track""" votes = set(Vote.objects.filter(user=user).values_list('track_id', flat=True)) tracks = set(Track.objects.filter(banter_done=True).values_list('pk', flat=True)) seed(user.username) try: queue = list(tracks - votes) skipped = False if not queue: skipped = True queue = list(Vote.objects.filter(user=user).filter(skipped=True).values_list('track_id', flat=True)) random_track = choice(queue) choice return (Track.objects.get(pk=random_track), skipped) except IndexError: return (None, False)