from djqmixin import Manager, QMixin from django.db.models import Q # Mixins to manage a AND'ed filter on tag_list class MarkQMixin(QMixin): def exact_in(self, tags): queryset = self.all() for tag in tags: queryset = queryset.filter(tag__name__exact=tag) return queryset MarkManager = Manager.include(MarkQMixin)
class Person(models.Model): group = models.ForeignKey(Group, related_name='people') age = models.PositiveIntegerField() objects = Manager.include(AgeMixin)()
class CredentialsMixin(QMixin): def authenticate(self, uuid, clear_password, place=u'', purpose=u''): try: ticket = self.get(uuid=uuid, place=place, purpose=purpose) except self.model.DoesNotExist: raise exceptions.CredentialsError( 'No ticket with UUID "{uuid}" for place "{place}" and purpose ' '"{purpose}"'.format(uuid=uuid, place=place, purpose=purpose)) # Check password. if not ticket.authenticate(clear_password): raise exceptions.CredentialsError( 'Wrong password for UUID {uuid}'.format(uuid=ticket.uuid)) # Check usage. if ticket.used: raise exceptions.TicketUsedError( 'Ticket with UUID {uuid} was used at {date}'.format( uuid=ticket.uuid, date=ticket.usage_datetime)) # Check expiry. if ticket.expired: raise exceptions.TicketExpiredError( 'Ticket with UUID {uuid} expired at {date}'.format( uuid=ticket.uuid, date=ticket.expiry_datetime)) # Alright, return ticket. return ticket #: Manager for :py:class:`django_ticketoffice.models.Ticket`. TicketManager = Manager.include(CredentialsMixin)
from djqmixin import Manager, QMixin class BalanceMixin(QMixin): def unbalanced(self): return self.exclude(total_balance=0) def balanced(self): return self.filter(total_balance=0) TransactionManager = Manager.include(BalanceMixin)()