Um die Möglichkeit zu verbessern, Informationen über Benutzer im Verwaltungsbereich der Website anzuzeigen, ist die Möglichkeit zur Anzeige von Benutzeravataren implementiert, sowohl im speziellen UserProfile-Modell, das eine Eins-zu-Eins-Beziehung zum Benutzermodell hat, als auch im Benutzermodell selbst fügte er die Anzeige des Avatars durch das eingebaute Formular hinzu.
Es sieht aus wie das:
Liste der Benutzerprofile
Darstellung von Avataren im Benutzerprofil
eine Liste von Benutzern
Avatar beim Anzeigen von Benutzerinformationen
Implementierung
UserProfile-Modell
Modelle.py
# method for indicating where to load avatars def upload_to(instance, filename): return 'avatars/%s' % filename class UserProfile(LikeDislikeRelationMixin, models.Model): # We indicate the relationship to the user model user = models.OneToOneField(User, on_delete=models.CASCADE) avatar = models.ImageField( verbose_name=_('Avatar'), upload_to=upload_to, null=True, blank=True ) def __str__(self): return self.user.username # Here I return the avatar or picture with an owl, if the avatar is not selected def get_avatar(self): if not self.avatar: return '/static/images/owl-gray.svg' return self.avatar.url # method to create a fake table field in read only mode def avatar_tag(self): return mark_safe('<img src="%s" width="50" height="50" />' % self.get_avatar()) avatar_tag.short_description = 'Avatar'
admin.py
Sehen wir uns nun an, wie ein Admin-Formular für unser UserProfile-Modell deklariert wird.
class UserProfileAdmin(admin.ModelAdmin): list_display = ('avatar_tag', 'user') # As a field, specify the method that will return the picture tag in the list of user profiles. readonly_fields = ['avatar_tag'] # Be sure to read only mode fields = ('avatar_tag', 'user') # Specify the fields that need to be displayed in the administrative form
Benutzermodell
Mit einem benutzerdefinierten Modell wird es etwas einfacher. Hier gibt es weniger Informationen.
admin.py
# Need inline form class ProfileInline(admin.StackedInline): model = models.UserProfile # specify the profile model can_delete = False # prohibit removal fields = ('avatar_tag',) # Specify which field to display, again avatar tag readonly_fields = ['avatar_tag'] # Specify that this read only field # Create your own form to display a user profile class EUserAdmin(UserAdmin): # Specify what will be in the form of inline inlines = [ ProfileInline ] # modify the list of displayed fields to see the avatar with the other fields list_display = ('avatar_tag',) + UserAdmin.list_display # and also create a method for getting the avatar tag from the user profile def avatar_tag(self, obj): return obj.userprofile.avatar_tag()
Registrieren Sie alle Modelle im Admin-Bereich
admin.site.register(UserProfile, UserProfileAdmin) admin.site.unregister(User) admin.site.register(User, EUserAdmin)
Für Websites auf Django empfehlen wir VDS-Hosting TIMEWEB