Search code examples
pythondjangomethodsprivatedjango-queryset

Using django queryset "private" method "_extract_model_params" in subclass


i'm trying to to do this:

from django.db import models
from django.db.models.query import QuerySet

class QuerySetManager(models.Manager):

    def get_query_set(self):
        return self.model.QuerySet(self.model)

    def __getattr__(self, attr, *args):
        return getattr(self.get_query_set(), attr, *args)


    # like get_or_create without save
    def get_or_new(self, defaults=None, **kwargs):
        lookup, params = self.get_query_set()._extract_model_params(defaults, **kwargs)
        try:
            return self.get(**lookup), False
        except self.model.DoesNotExist:
            obj = self.model(**params)
            return obj, True

an example model:

class Person(models.Model):
    # fields...
    objects = QuerySetManager()

    class QuerySet(QuerySet):
        # custom filter methods
        pass

I want to use the _extract_model_params to get the lookup and params dict, like those used in the get_or_create method.

The problem is that self.get_query_set(), even if is a QuerySet class, doesn't have that method.

Why?


Solution

  • What version of Django are you using? That method doesn't appear to exist in 1.5 or even the 1.6 betas.