小编out*_*ure的帖子

带有集成查询集的subclassed django模型

就像在这个问题中一样,除了我希望能够拥有返回混合对象的查询集:

>>> Product.objects.all()
[<SimpleProduct: ...>, <OtherProduct: ...>, <BlueProduct: ...>, ...]
Run Code Online (Sandbox Code Playgroud)

我发现我不能只设置Product.Meta.abstract为true或者只是将OR不同对象的查询集合在一起.很好,但这些都是公共类的子类,所以如果我把它们的超类保留为非抽象类,我应该感到高兴,只要我能让它的管理器返回正确类的对象.django中的查询代码完成了它的事情,只是调用Product().听起来很容易,除非它在我覆盖时爆炸Product.__new__,我猜测是因为__metaclass__在模型中...这里的非django代码表现得非常我想要它:

class Top(object):
    _counter = 0
    def __init__(self, arg):
        Top._counter += 1
        print "Top#__init__(%s) called %d times" % (arg, Top._counter)
class A(Top):
    def __new__(cls, *args, **kwargs):
        if cls is A and len(args) > 0:
            if args[0] is B.fav:
                return B(*args, **kwargs)
            elif args[0] is C.fav:
                return C(*args, **kwargs)
            else:
                print "PRETENDING TO BE ABSTRACT"
                return None # or raise?
        else:
            return super(A).__new__(cls, …
Run Code Online (Sandbox Code Playgroud)

python django metaclass django-models django-queryset

7
推荐指数
1
解决办法
1973
查看次数