代码之家  ›  专栏  ›  技术社区  ›  apelliciari

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

  •  0
  • apelliciari  · 技术社区  · 12 年前

    我正在努力做到这一点:

    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 类,没有该方法。

    为什么?

    1 回复  |  直到 12 年前
        1
  •  1
  •   Kevin Christopher Henry    12 年前

    你在使用什么版本的Django?这种方法在1.5甚至1.6倍测试中似乎并不存在。