在子类中使用django queryset“private”方法“_extract_model_params”

时间:2013-09-19 14:30:23

标签: python django methods private django-queryset

我正在尝试这样做:

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

示例模型:

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

    class QuerySet(QuerySet):
        # custom filter methods
        pass

我想使用_extract_model_params获取lookupparams dict,就像get_or_create方法中使用的那样。

问题在于self.get_query_set(),即使是QuerySet类,也没有该方法。

为什么?

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的Django?该方法似乎不存在于1.5或甚至1.6 beta中。