gpt4 book ai didi

python - 如果在当前模型中找不到,则访问一对一链接模型的所有属性

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:29 25 4
gpt4 key购买 nike

我有一个模型作为 OneToOneField 链接到另一个模型。例如:

class Profile(models.Model):
#other fields ...
user = models.OneToOneField(User, null=True, blank=True)

如果 Profile 或 User 中存在,我想获取带点符号的属性。我做了以下事情:

class Profile(models.Model):
....

def __getattr__(self, name):
if self.user:
return self.user.name
else:
raise AttributeError
return super().__getattr__(self,name)

例如,如果 Profile 没有 email 字段,我想将其作为 profile.email (profile 是一个 Profile 实例)如果它存在于 User 中。

但是我得到如下错误。

    if self.user:
RuntimeError: maximum recursion depth exceeded

我如何实现这种行为 - 从当前实例获取属性,如果不可用,并且如果一对一字段不为空,则在那里查找?

最佳答案

不需要这个方法。你知道什么模型有什么属性那么为什么你应该盲目地调用一个方法?这会让其他合作开发者感到困惑,你不应该这样做。在最坏的情况下,我会做一个属性:

@property
def get_name(self):
if hasattr(self, 'name'):
return self.name
return self.user.first_name # there is no name field in django user model

关于python - 如果在当前模型中找不到,则访问一对一链接模型的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38238069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com