예제 #1
0
파일: tests.py 프로젝트: shellfly/django
    def test_manager_methods(self):
        """
        This test ensures that the correct set of methods from `QuerySet`
        are copied onto `Manager`.

        It's particularly useful to prevent accidentally leaking new methods
        into `Manager`. New `QuerySet` methods that should also be copied onto
        `Manager` will need to be added to `ManagerTest.QUERYSET_PROXY_METHODS`.
        """
        self.assertEqual(
            sorted(BaseManager._get_queryset_methods(QuerySet).keys()), sorted(self.QUERYSET_PROXY_METHODS)
        )
예제 #2
0
파일: tests.py 프로젝트: Runur/django-1
    def test_manager_methods(self):
        """
        This test ensures that the correct set of methods from `QuerySet`
        are copied onto `Manager`.

        It's particularly useful to prevent accidentally leaking new methods
        into `Manager`. New `QuerySet` methods that should also be copied onto
        `Manager` will need to be added to `ManagerTest.QUERYSET_PROXY_METHODS`.
        """
        self.assertEqual(
            sorted(BaseManager._get_queryset_methods(QuerySet).keys()),
            sorted(self.QUERYSET_PROXY_METHODS),
        )
예제 #3
0
class ConversationMessageManager(
        BaseManager.from_queryset(ConversationMessageQuerySet)):
    def create(self, **kwargs):
        if 'thread' not in kwargs:
            # make sure author is participant (to receive notifications)
            conversation = kwargs.get('conversation')
            author = kwargs.get('author')
            conversation.conversationparticipant_set.get_or_create(user=author)

        obj = super().create(**kwargs)
        # clear cached value
        if obj.thread and hasattr(obj.thread, '_replies_count'):
            del obj.thread._replies_count
        return obj
예제 #4
0
class NotificationManager(BaseManager.from_queryset(NotificationQuerySet)):
    def create_for_pickup_collectors(self, collectors, type):
        for collector in collectors:
            pickup = collector.pickupdate
            super().create(
                user=collector.user,
                type=type,
                context={
                    'group': pickup.group.id,
                    'store': pickup.store.id,
                    'pickup': pickup.id,
                    'pickup_collector': collector.id,
                }
            )
예제 #5
0
class TransactionManager(BaseManager.from_queryset(TransactionQuerySet)):
    """ Custom manager """

    def get_for_token(self, tidb64, token):
        transaction = None
        try:
            tid = urlsafe_base64_decode(tidb64).decode()
            transaction = Transaction.objects.get(pk=tid)
            if not default_token_generator.check_token(transaction, token):
                transaction = None
        except (TypeError, ValueError, OverflowError, ObjectDoesNotExist, ValidationError):
            pass

        return transaction
예제 #6
0
class ExchangeRate(models.Model):
    source = models.PositiveSmallIntegerField(
        choices=currency_exchange_choices,
        help_text=_('Where the exchange data comes from'),
    )
    base_currency = models.CharField(max_length=3, db_index=True)
    rates = models.JSONField(default=dict)
    last_updated_at = models.DateTimeField(auto_now=True, db_index=True)
    objects = BaseManager.from_queryset(ExchangeRateQuerySet)()

    class Meta:
        ordering = ['base_currency', '-last_updated_at']

    def __repr__(self):
        return 'Exchange rate for {0}'.format(self.base_currency)
예제 #7
0
class EntityManager(BaseManager.from_queryset(EavQuerySet)):
    """
    Our custom manager, overrides ``models.Manager``.
    """
    _queryset_class = EavQuerySet

    def create(self, **kwargs):
        """
        Parse eav attributes out of *kwargs*, then try to create and save
        the object, then assign and save it's eav attributes.
        """
        config_cls = getattr(self.model, '_eav_config_cls', None)

        if not config_cls or config_cls.manager_only:
            return super(EntityManager, self).create(**kwargs)

        prefix = '%s__' % config_cls.eav_attr
        new_kwargs = {}
        eav_kwargs = {}

        for key, value in kwargs.items():
            if key.startswith(prefix):
                eav_kwargs.update({key[len(prefix):]: value})
            else:
                new_kwargs.update({key: value})

        obj = self.model(**new_kwargs)
        obj_eav = getattr(obj, config_cls.eav_attr)

        for key, value in eav_kwargs.items():
            setattr(obj_eav, key, value)

        obj.save()
        return obj

    def get_or_create(self, **kwargs):
        """
        Reproduces the behavior of get_or_create, eav friendly.
        """
        try:
            return self.get(**kwargs), False
        except self.model.DoesNotExist:
            return self.create(**kwargs), True
예제 #8
0
class SerializableManager(BaseManager.from_queryset(SerializableQuerySet)):
    def __init__(self,
                 *,
                 select_related=None,
                 prefetch_related=None,
                 default_serializer=BaseSerializer):
        super().__init__()
        self.default_serializer = default_serializer(
            select_related=select_related,
            prefetch_related=prefetch_related,
        )

    def to_serialize(self, serializer=None):
        if serializer is None:
            serializer = self.default_serializer
        return self.get_queryset().to_serialize(serializer)

    @classmethod
    def from_queryset(cls, queryset_class, class_name=None):
        if not hasattr(queryset_class, 'to_serialize'):
            queryset_class = type(
                f'SerializableQuerySet__{queryset_class.__name__}',
                (SerializableQuerySet, queryset_class), {})
        return super().from_queryset(queryset_class, class_name=class_name)
예제 #9
0
class LocationManager(BaseManager.from_queryset(LocationQuerySet)):
    """
예제 #10
0
class TaskManager(BaseManager.from_queryset(TaskQueryset)):
    """ Custom manager from queryset """

    pass
예제 #11
0
class BulkUpdateManager(BaseManager.from_queryset(BulkUpdateQuerySet), models.Manager):
    pass
예제 #12
0
class PreparedStatementManager(
        BaseManager.from_queryset(PreparedQuerySqlBuilder)):
    _queryset_class = PreparedQuerySqlBuilder
예제 #13
0
class AccountManager(BaseManager.from_queryset(AccountQuerySet)):
    use_for_related_fields = True
예제 #14
0
class PIDManager(BaseManager.from_queryset(PIDQuerySet)):
    pass
예제 #15
0
class CitusComparisonManager(BaseManager.from_queryset(CitusComparisonQuerySet)
                             ):
    pass
예제 #16
0
class TreeManager(BaseManager.from_queryset(TreeQuerySet)):
    def get_queryset(self):
        return super().get_queryset().order_by("path")
예제 #17
0
class TestManager(BaseManager.from_queryset(TestQuerySet)):
    pass
예제 #18
0
class NoDeleteManager(BaseManager.from_queryset(NoDeleteQuerySet)):
    def get_queryset(self):
        return super().get_queryset().filter(date_deleted__isnull=True)
예제 #19
0
class IdMapManager(BaseManager.from_queryset(IdMapQuerySet), Manager):
    pass
예제 #20
0
class PreparedManager(BaseManager.from_queryset(PreparedQuerySet)):
    pass
예제 #21
0
class VoteManager(BaseManager.from_queryset(VoteQuerySet)):
    use_for_related_fields = True
예제 #22
0
class JobManager(BaseManager.from_queryset(JobQuerySet)):
    use_for_related_fields = True
예제 #23
0
class GroupManager(BaseManager.from_queryset(GroupQuerySet)):
    use_for_related_fields = True
예제 #24
0
class RiverManager(BaseManager.from_queryset(RiverQuerySet)):
    pass
예제 #25
0
class TaskManager(BaseManager.from_queryset(TaskQuerySet)):
    use_for_related_fields = True
예제 #26
0
class LegalPersonManager(BaseManager.from_queryset(LegalPersonQuerySet)):
    pass
예제 #27
0
class JobManager(BaseManager.from_queryset(JobQueryset)):
    """ Custom manager from queryset """

    pass
예제 #28
0
    name = models.CharField(max_length=100)
    slug = models.SlugField()

    class Meta:
        ordering = ['name']

    def __str__(self):
        return self.name


class DoesNotExistQuerySet(QuerySet):
    def get(self, *args, **kwargs):
        raise Author.DoesNotExist


DoesNotExistBookManager = BaseManager.from_queryset(DoesNotExistQuerySet)


class Book(models.Model):
    name = models.CharField(max_length=300)
    slug = models.SlugField()
    pages = models.IntegerField()
    authors = models.ManyToManyField(Author)
    pubdate = models.DateField()

    objects = models.Manager()
    does_not_exist = DoesNotExistBookManager()

    class Meta:
        ordering = ['-pubdate']
예제 #29
0
class SmartManager(BaseManager.from_queryset(SmartQuerySet)):
    pass
예제 #30
0
class VirtualDeletionBaseManager(
        BaseManager.from_queryset(VirtualDeletionQuerySet), Manager):
    pass
예제 #31
0
class EntryManager(BaseManager.from_queryset(EntryQuerySet)):
    use_for_related_fields = True
예제 #32
0
 def get_manager(cls):
     return type('DictManager', (BaseManager.from_queryset(cls)), {})