Django: как отобразить полное имя в админке с помощью get_full_name()?
Я знаю, что есть много подобных вопросов, но я не смог найти ответ.
Я пытаюсь получить доступ к методу get_full_name() в админке моего проекта. Я расширил модель Django User классом Bio, связанным через "user" OneToOneField и обновляемым через сигналы, как показано здесь . Основной класс моего models.py, ObjetArchi, также связан с моделью User через поле "auteur" ForeignKey.
Я хотел бы показывать полное имя пользователя, как это разрешено методом get_full_name(), во всех частях админки: на list_display, list_filter и fieldsets, а также в форме ObjetArchi.
Как и где я должен написать этот метод?
models.py:
class Bio(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
null=True
)
coordonnees = models.CharField(
max_length=300,
verbose_name='Coordonnées institutionnelles de l\'auteur',
help_text='300 caractères max.',
blank=True
)
site_web = models.URLField(
verbose_name='Site web personnel',
blank=True
)
biographie = models.TextField(
blank=True,
null=True,
)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Bio.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.bio.save()
(...)
class ObjetArchi(gis_models.Model):
id = models.AutoField(
primary_key=True,
verbose_name= 'Identifiant'
)
titre = models.CharField(
max_length=100,
verbose_name='Titre',
blank=True,
null=True
)
date = models.DateField(
default=timezone.now,
verbose_name='Date de publication'
)
auteur = models.ForeignKey(
User,
on_delete=models.SET_NULL,
related_name='objets_archi_user',
verbose_name='Auteur.e',
blank=True,
null=True
)
resume = models.TextField(
verbose_name='Résumé',
help_text='Formatage Markdown:<br>*Italique*<br>**Gras**<br>',
blank=True,
null=True
)
last_modified = models.DateTimeField(
auto_now=True,
verbose_name='Date de dernière modification')
last_modified_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
verbose_name='Modifié par',
related_name='objet_archi_modifiers',
blank=True,
null=True
)
admin.py:
class BioInline(admin.StackedInline):
model = Bio
can_delete = False
verbose_name = 'biographie'
class UserAdmin(BaseUserAdmin):
inlines = (BioInline,)
class ObjetArchiAdmin(GeoModelAdminMixin, nested_admin.NestedModelAdmin):
formfield_overrides = {
models.TextField: {'widget': AdminMarkdownxWidget},
}
form = ObjetArchiForm
list_display = ('titre', 'auteur', 'date', 'id')
list_filter = ('auteur',)
readonly_fields = ('auteur', 'last_modified', 'last_modified_by',)
fieldsets = (
('État-Civil', {
'fields': (('titre', 'date'), ('auteur', 'last_modified', 'last_modified_by'), 'resume')
}),
def save_model(self, request, obj, form, change):
if not obj.auteur:
obj.auteur = request.user
obj.last_modified_by = request.user
obj.save()
(...)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
admin.site.register(ObjetArchi, ObjetArchiAdmin)