我正在尝试这样做:
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
获取lookup
和params
dict,就像get_or_create
方法中使用的那样。
问题在于self.get_query_set()
,即使是QuerySet
类,也没有该方法。
为什么?
答案 0 :(得分:1)
您使用的是什么版本的Django?该方法似乎不存在于1.5或甚至1.6 beta中。