Django: Установка def __str__ в связанную модель

Задача: Я пытаюсь установить __str__ модели в имя связанной модели. Модель Profile имеет __str__, которая возвращает "фамилию, имя" пользователя. Я хотел бы, чтобы Inspector возвращали нечто подобное с их inspector_number.

В настоящее время: __str__ возвращает "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

Причина этого заключается в том, что inspector является ForeignKey. Это означает, что Inspector может иметь ноль, один или более связанных Profile, и это также означает, что self.inspector_profile - это не объект Profile, а RelatedObjectManager, который управляет объектами Profile. Например, вы можете вывести все связанные имена Profile с помощью:

class Inspector(BaseModel):
    # …
    
    def __str__(self):
        profiles = [str(profile) for profile in self.inspector_profile.all()]
        return f'{" ".join(profiles)} {self.inspector_number}'

Но, вероятно, главный вопрос заключается в том, следует ли Inspector соотносить с потенциально множественными Profile, и что это соотношение не должно быть OneToOneField от Inspector к Profile.

Вернуться на верх