Сайттың әкімшілік панелінде пайдаланушылар туралы ақпаратты көрсету мүмкіндігін жақсарту үшін пайдаланушы аватарларын көрсету мүмкіндігі Пайдаланушы үлгісімен бір-біріне қатынасы бар арнайы UserProfile үлгісінде де, Пайдаланушы үлгісінің өзі, ол кірістірілген пішін арқылы аватар дисплейін қосты.
Бұл келесідей көрінеді:
Пайдаланушы профильдерінің тізімі
Пайдаланушы профилінде аватарларды көрсету
пайдаланушылар тізімі
Пайдаланушы ақпаратын көрсетудегі аватар
Іске асыру
UserProfile үлгісі
models.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
Енді UserProfile үлгісі үшін әкімші пішінін қалай жариялау керектігін көрейік.
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
Үлгі пайдаланушы
Арнайы үлгімен бұл сәл оңайырақ болады. Мұнда ақпарат аз.
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()
Барлық үлгілерді әкімші панелінде тіркеңіз
admin.site.register(UserProfile, UserProfileAdmin) admin.site.unregister(User) admin.site.register(User, EUserAdmin)
Django сайтында [VDS-хостинг TIMEWEB] ұсынылады (https://timeweb.com/ru/?i=27415)