我有一个AuthUser模型,我使用get_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
有什么想法吗?
答案 0 :(得分:1)
根据Django 1.8文档,PRIMARY KEY
方法已经被弃用,虽然这意味着它应该暂时仍然有用...据说你可以尝试更新从例子中找到的所有弃用方法{{3 }}
对于给定示例的get_all_related_objects()
(复制并粘贴)
get_all_related_objects()
这只是一个建议。让我知道你是怎么做的:D
答案 1 :(得分:1)
感谢指点;这就是我最终使用的东西。尽管如此,仍然没有解决为什么它首先失败的原因: - /
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
答案 2 :(得分:0)
查看文档的Migrating from the old API部分。它有例子。考虑用MyModel._meta.get_all_related_objects()
代替
[
f for f in MyModel._meta.get_fields()
if (f.one_to_many or f.one_to_one) and f.auto_created
]