Python 按代理模型父级的继承模型字段筛选代理模型。

Python 按代理模型父级的继承模型字段筛选代理模型。,python,django,Python,Django,我正在使用Django 1.6和模型继承。标题可能令人困惑,以下是解释 class ParentModel(models.Model) class Meta: db_table = "parent_model" my_field=..... class ProxyModelOfParentModel(ParentModel) class Meta: proxy=True objects=CustomManager() cl

我正在使用Django 1.6和模型继承。标题可能令人困惑,以下是解释

class ParentModel(models.Model)
    class Meta:
        db_table = "parent_model"

    my_field=.....

class ProxyModelOfParentModel(ParentModel)
    class Meta:
        proxy=True

    objects=CustomManager()


class InheritedModel(ParentModel)
    class Meta:
        db_table = "inherited_model"

    my_extra_field=.....
假设,这些是我们的模型。当我在ParentModel上尝试通过我的\u额外\u字段进行过滤时,我会这样做

ParentModel.objects.filter(inheritedmodel__my_extra_field='test')
但是,我想在代理模型上进行过滤,比如

ProxyModelOfParentModel.objects.filter(inheritedmodel__my_extra_field='test')
ProxyModelOfParentModel.objects.filter(inheritedmodel__my_extra_field='test')
当我运行此命令时,它将无法在代理模型中找到字段inheritedmodel。这也可能是Django的bug,我不知道。不知何故,当我尝试在代理模型上进行筛选时,django现在确实正确地构建了查询集

我使用代理模型而不是父模型的原因是,在不同的管理员中使用代理模型。当我在admin
list\u filter
中输入密钥时,我遇到了
FieldDoesNotExists
错误

有我提到的过滤方法吗?
谢谢大家!

正如我提到的,这是因为代理模型初始化的django实现。我不知道,这是否是错误,但我需要以某种方式修复它。我发现这是因为模型元初始化中的一部分。
django.db.models.options.py中的这个部分是我注释掉的部分导致了这个问题

def _fill_related_objects_cache(self):
    cache = SortedDict()
    parent_list = self.get_parent_list()
    for parent in self.parents:
        for obj, model in parent._meta.get_all_related_objects_with_model(include_hidden=True):
            #THIS PART WAS CAUSING THE PROBLEM
            # if (obj.field.creation_counter < 0 or obj.field.rel.parent_link) and obj.model not in parent_list:
            #     continue
            if not model:
                cache[obj] = parent
            else:
                cache[obj] = model
    # Collect also objects which are in relation to some proxy child/parent of self.
    proxy_cache = cache.copy()
    for klass in get_models(include_auto_created=True, only_installed=False):
        if not klass._meta.swapped:
            for f in klass._meta.local_fields:
                if f.rel and not isinstance(f.rel.to, six.string_types) and f.generate_reverse_relation:
                    if self == f.rel.to._meta:
                        cache[f.related] = None
                        proxy_cache[f.related] = None
                    elif self.concrete_model == f.rel.to._meta.concrete_model:
                        proxy_cache[f.related] = None
    self._related_objects_cache = cache
    self._related_objects_proxy_cache = proxy_cache
现在,我可以过滤

ProxyModelOfParentModel.objects.filter(inheritedmodel__my_extra_field='test')