Hi,
I’m trying to access to the get_full_name()
method in the admin of my project. I extended the Django User model with a Bio
class, connected through a “user” OneToOneField
and updated via signals as exposed here. The main class of my models.py, ObjetArchi
, is also related to the User model through the “auteur” ForeignKey
field.
I’d like to show the users full name’s, as allowed by the get_full_name()
method, in every part of the admin: on list_display
, list_filter
and fieldsets
, as well as in the ObjetArchi form.
How and where should I write this method?
Thanks for your help!
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)