Skip to main content

Extended QuerySets for Django

Project description

ExtendedQuerySets

ExtendedQuerySets is meant to simplify the way to retrieve one object from db using Django QuerySets.

Installation:

$ pip install extquerysets

Examples:

For the following examples assume that we have a model Player, and we've implemented custom Manager and QuerySet for that model.

Task 1: Retrieve one object or return None if object doesn't exist.

Usual way:

try:
   winner = Player.objects.winner()
except Player.DoesNotExist:
   winner = None

Using ExtendedQuerySets:

winner = Player.objects.winner_or_none()

Task 2: Retrieve one object or raise Http404 if object doesn't exist.

Usual way:

try:
   winner = Player.objects.winner()
except Player.DoesNotExist:
   raise Http404

Using ExtendedQuerySets:

winner = Player.objects.winner_or_404()

Usage:

models.py

from django.db import models

from .querysets import PlayerQuerySet


class Player(model.Model):
    name = models.CharField(_('Name'), max_length=12)
    is_winner = models.BooleanField(_('Is winner'), default=False)
    
    objects = PlayerQuerySet.as_manager()

querysets.py

from extquerysets.base import CustomQuerySet
from extquerysets.decorators import or_404
from extquerysets.decorators import or_none


class PlayerQuerySet(CustomQuerySet):
    @or_404
    @or_none
    def get(self, *args, **kwargs):
        return super().get(*args, **kwargs)

    @or_404
    @or_none
    def winner(self):
        return self.get(is_winner=True)

Now you can retrieve Player instance:

from .models import Player

...

player = Player.objects.winner_or_none()
player = Player.objects.winner_or_404()
player = Player.objects.filter(name__icontains='Tom').winner_or_none()
player = Player.objects.filter(name__icontains='Tom').winner_or_404()
player = Player.objects.get_or_none(pk=10)
player = Player.objects.get_or_404(pk=10)

...

More info about custom Managers and QuerySets: https://docs.djangoproject.com/en/2.0/topics/db/managers/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

extquerysets-0.0.4.tar.gz (3.5 kB view details)

Uploaded Source

File details

Details for the file extquerysets-0.0.4.tar.gz.

File metadata

  • Download URL: extquerysets-0.0.4.tar.gz
  • Upload date:
  • Size: 3.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.0

File hashes

Hashes for extquerysets-0.0.4.tar.gz
Algorithm Hash digest
SHA256 e4d1dc88e14413327b74ec3c4b907fee4d6071f5a760a867107ef515835c9cb1
MD5 4c7cf8fad2a9d00c0275cf1e7a856980
BLAKE2b-256 4ebf2e64bf3909bc0049bea25c45eb5d87bd6b6a92da5a65ce90ff389db2024f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page