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'): 解决问题。所有记录都有该属性,但这似乎解决了我的问题。

发生这种情况的原因是因为 inspectorForeignKey。这意味着 Inspector 可以有零个、一个或多个相关的 Profiles,这也意味着 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 相关,并且这种关系不应该是 OneToOneFieldInspectorProfile.