Django代理模型返回父模型

时间:2014-06-06 16:34:45

标签: python django proxy

我在django 1.6.5中遇到一个奇怪的问题。

在distribution.models中我有:

from core.models import Book, Person

class Proxy1(Book):
    class Meta:
        proxy = True

class Proxy2(Person):
    class Meta:
        proxy = True

怎么会发生这种情况?:

>>> from distribution.models import Proxy1, Proxy2
>>> type(Proxy1.objects.first())
<class 'core.models.Book'>
>>> type(Proxy2.objects.first())
<class 'distribution.models.Proxy2'>

任何想法在哪里寻找原因?

1 个答案:

答案 0 :(得分:1)

经过很长时间的狩猎,我终于找到了罪魁祸首。来自django-money软件包的MoneyField在模型管理器上做了一些黑暗魔法,它以某种方式打破了为代理模型返回正确的模型类。我提出了一个问题:https://github.com/jakewins/django-money/issues/80

我通过手动覆盖代理类上的'objects'属性来解决这个问题:

class ProxyModel(SomeModelWithMoneyField):

    # This fixes django-money that would else return parent objects
    objects = models.Manager()

    class Meta:
        proxy=True