Django:将 def __str__ 设置为相关模型
Django: Setting def __str__ to a Related Model
Objective: 我正在尝试将模型的 __str__
设置为相关模型的名称。 Profile
模型有一个 __str__
是 return 用户的“姓氏,名字”。我想要 Inspector
到 return 与他们的 inspector_number
.
类似的东西
目前:__str__
return 是“users.Profile.None 12345”,而不是想要的“Doe, John 12345”。
这是我第一次使用 related_name
作为模型,我似乎遗漏了一些东西。
Model.py
class Profile(BaseModel):
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True, blank=True)
inspector = models.ForeignKey(Inspector, on_delete=models.SET_NULL, null=True, blank=True, related_name="inspector_profile")
def __str__(self):
return self.user.last_name + ", " + self.user.first_name
class Inspector(BaseModel):
...
inspector_number = models.CharField(max_length=19, unique=True, editable=False, default=get_inspector_number)
def __str__(self):
ret = str(self.inspector_profile) + " " + str(self.inspector_number)
return ret
更新:
我能够使用 if hasattr(self, 'inspector_profile'):
解决问题。所有记录都有该属性,但这似乎解决了我的问题。
发生这种情况的原因是因为 inspector
是 ForeignKey
。这意味着 Inspector
可以有零个、一个或多个相关的 Profile
s,这也意味着 self.inspector_profile
不是 Profile
对象,而是 RelatedObjectManager
管理 Profile
个对象。例如,您可以打印所有相关的 Profile
名称:
class Inspector(BaseModel):
# …
def __str__(self):
profiles = [str(profile) for profile in self<strong>.inspector_profile.all()</strong>]
return f'{" ".join(profiles)} {self.inspector_number}'
但可能的主要问题是 Inspector
是否应该与潜在的 多个 Profile
相关,并且这种关系不应该是 OneToOneField
从 Inspector
到 Profile
.
Objective: 我正在尝试将模型的 __str__
设置为相关模型的名称。 Profile
模型有一个 __str__
是 return 用户的“姓氏,名字”。我想要 Inspector
到 return 与他们的 inspector_number
.
目前:__str__
return 是“users.Profile.None 12345”,而不是想要的“Doe, John 12345”。
这是我第一次使用 related_name
作为模型,我似乎遗漏了一些东西。
Model.py
class Profile(BaseModel):
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True, blank=True)
inspector = models.ForeignKey(Inspector, on_delete=models.SET_NULL, null=True, blank=True, related_name="inspector_profile")
def __str__(self):
return self.user.last_name + ", " + self.user.first_name
class Inspector(BaseModel):
...
inspector_number = models.CharField(max_length=19, unique=True, editable=False, default=get_inspector_number)
def __str__(self):
ret = str(self.inspector_profile) + " " + str(self.inspector_number)
return ret
更新:
我能够使用 if hasattr(self, 'inspector_profile'):
解决问题。所有记录都有该属性,但这似乎解决了我的问题。
发生这种情况的原因是因为 inspector
是 ForeignKey
。这意味着 Inspector
可以有零个、一个或多个相关的 Profile
s,这也意味着 self.inspector_profile
不是 Profile
对象,而是 RelatedObjectManager
管理 Profile
个对象。例如,您可以打印所有相关的 Profile
名称:
class Inspector(BaseModel):
# …
def __str__(self):
profiles = [str(profile) for profile in self<strong>.inspector_profile.all()</strong>]
return f'{" ".join(profiles)} {self.inspector_number}'
但可能的主要问题是 Inspector
是否应该与潜在的 多个 Profile
相关,并且这种关系不应该是 OneToOneField
从 Inspector
到 Profile
.