Python 在django中检查相关模型的超类

Python 在django中检查相关模型的超类,python,django,django-models,Python,Django,Django Models,我有一个AuthUser模型,我使用get\u profile()调用来获取有关用户的一些信息(忽略配置文件已被弃用的事实-我并没有真正将它们用作配置文件)。但是,有两种不同的配置文件模型(Student和StaffMember)都是抽象模型(SchoolPerson)的子类。以下代码适用于django 1.6,但不再适用于django 1.8: def get_profile(self): for related in self._meta.get_all_related_object

我有一个AuthUser模型,我使用
get\u profile()
调用来获取有关用户的一些信息(忽略配置文件已被弃用的事实-我并没有真正将它们用作配置文件)。但是,有两种不同的配置文件模型(
Student
StaffMember
)都是抽象模型(
SchoolPerson
)的子类。以下代码适用于django 1.6,但不再适用于django 1.8:

def get_profile(self):
    for related in self._meta.get_all_related_objects():
        if related.model.__base__.__name__ == 'SchoolPerson':  # TODO - might we have non-SchoolPerson profiles?
            try:
                return getattr(self, related.get_accessor_name())
            except ObjectDoesNotExist:
                pass
    raise ObjectDoesNotExist

有什么想法吗?

根据Django 1.8文档,
get\u all\u related\u objects()
方法已被弃用,尽管这意味着它目前仍可以工作。。也就是说,您可以尝试更新从示例中找到的所有不推荐的方法

对于给定示例的
get_all_related_objects()
(复制并粘贴)

这只是一个建议。让我知道你的进展情况:看一下文档的部分。它有例子。考虑<代码> MySimult.Meta .GETAYALLR相关对象(<)/> >

[
    f for f in MyModel._meta.get_fields()
    if (f.one_to_many or f.one_to_one) and f.auto_created
]

谢谢你的指点;这就是我最后使用的。尽管如此,我们仍然没有弄清楚它失败的原因:-/

def get_profile(self):
    for field in self._meta.get_fields():
        if field.one_to_one and 'SchoolPerson' in [base.__name__ for base in field.related_model.__bases__]:
            try:
                return getattr(self, field.get_accessor_name())
            except ObjectDoesNotExist:
                pass
    raise ObjectDoesNotExist

为什么它不起作用?什么是回溯?在django 1.8中MetaAPI已经过规范化
def get_profile(self):
    for field in self._meta.get_fields():
        if field.one_to_one and 'SchoolPerson' in [base.__name__ for base in field.related_model.__bases__]:
            try:
                return getattr(self, field.get_accessor_name())
            except ObjectDoesNotExist:
                pass
    raise ObjectDoesNotExist