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)
Вернуться на верх