Я разрабатываю веб-приложение с Django (2.2). У меня есть следующая модель профиля, расширяющая встроенную модель пользователя через отношение «один к одному».
class Profile(models.Model):
class Meta:
ordering = ['user__last_name']
txt = models.CharField("TXT", max_length=5, null=True, blank=True, unique=True)
user = models.OneToOneField(User, on_delete=models.PROTECT)
colleague = models.ForeignKey('self', on_delete=models.PROTECT, null=True, blank=True)
def __str__(self):
""" Display of User with its full name"""
return "%s %s" % (self.user.last_name.upper(), self.user.first_name.capitalize())
Метод __str__ хорошо работает в представлении списка администратора или в оболочке Django. Однако когда я пытаюсь получить доступ к форме администратора, возникает исключение, указывающее на метод __str__, но без каких-либо подробностей.
При удалении метода __str__ форма отображается корректно.
Вот модельадмин
class ProfileAdmin(admin.ModelAdmin):
readonly_fields = ('get_last_name','get_first_name',)
fieldsets = [
('User',
{'fields': ['get_last_name', 'get_first_name','txt', 'colleague']}),
]
#Sélection des champs à afficher dans la vue liste
list_display = ('__str__','get_poste','txt', 'colleague ')
#Champ de recherche
search_fields = ['user__first_name',
'user__last_name',
]
#calculate fields for list_display
def get_last_name(self, obj):
return obj.user.last_name
def get_first_name(self, obj):
return obj.user.first_name
#Define description of fields for list_display
get_last_name.short_description = 'Name'
get_first_name.short_description = 'Firstname'
#Enable sorting on calculated fields
get_last_name.admin_order_field = 'user__last_name'
get_first_name.admin_order_field = 'user__first_name'
Любые советы по решению этой проблемы будут оценены
Stack trace: > File "C:\...\app\models.py", line 108, in str > return "%s %s" % (self.user.last_name, self.user.first_name)
17.11.2020__str__
, чтобы увидеть, вызывает ли он правильный__str__
? 17.11.2020