Django自定义用户模型图像字段显示在用户列表中

huangapple go评论96阅读模式
英文:

Django CustomUser model Image field display in User List

问题

UserProfile 是一个 CustomUser 模型,拥有 avatar、bio 和 display 字段。

我想在用户列表中显示个人资料的头像。

我已经添加了一个名为 avatar_tag 的函数,供用户列表调用。

  1. #models.py
  2. class UserProfile(models.Model):
  3. user = models.OneToOneField(User,on_delete=models.CASCADE)
  4. def get_upload_avatar_to(self, filename):
  5. return f"images/avatar/{self.user.id}/{filename}"
  6. avatar = models.ImageField(upload_to=get_upload_avatar_to, null=True, blank=True)
  7. def avatar_tag(self):
  8. if self.avatar.url is not None:
  9. return mark_safe('<img src="{}" height="50"/>'.format(self.avatar.url))
  10. else:
  11. return ""
  12. avatar_tag.short_description = 'Image'
  13. avatar_tag.allow_tags = True
  14. full_name = ''
  15. bio = models.TextField(default="", blank=True)
  16. display = models.CharField(default=full_name,max_length=512,blank=True)

在 admin.py 中的代码如下:

  1. class UserProfileInline(admin.StackedInline):
  2. model = UserProfile
  3. fk_name = 'user'
  4. can_delete = False
  5. verbose_name = "User profile"
  6. verbose_name_plural = 'Profiles'
  7. classes = ('text-capitalize','collapse open')
  8. extra = 1
  9. list_display = ('avatar_tag',)
  10. fieldsets = (
  11. ("Profile", {'fields': ('avatar','bio','display',)}),)
  12. class UserProfileAdmin(UserAdmin):
  13. inlines = (UserProfileInline,)

如何在用户表的列表视图中显示头像图片?

在用户列表中没有看到头像,但没有报错。

这是图片
Django自定义用户模型图像字段显示在用户列表中

英文:

UserProfile is CustomUser Model having columns avatar, bio and display fields.

I want to show Profile avatar in the User List

I have added avatar_tag function to be called by the users list

  1. #models.py
  2. class UserProfile(models.Model):
  3. user = models.OneToOneField(User,on_delete=models.CASCADE)
  4. def get_upload_avatar_to(self, filename):
  5. return f&quot;images/avatar/{self.user.id}/{filename}&quot;
  6. avatar = models.ImageField(upload_to=get_upload_avatar_to, null=True, blank=True)
  7. def avatar_tag(self):
  8. if self.avatar.url is not None:
  9. return mark_safe(&#39;&lt;img src=&quot;{}&quot; height=&quot;50&quot;/&gt;&#39;.format(self.avatar.url))
  10. else:
  11. return &quot;&quot;
  12. avatar_tag.short_description = &#39;Image&#39;
  13. avatar_tag.allow_tags = True
  14. full_name = &#39;&#39;
  15. bio = models.TextField(default=&quot;&quot;, blank=True)
  16. display = models.CharField(default=full_name,max_length=512,blank=True)

admin.py code is below

  1. class UserProfileInline(admin.StackedInline):
  2. model = UserProfile
  3. fk_name = &#39;user&#39;
  4. can_delete = False
  5. verbose_name = &quot;User profile&quot;
  6. verbose_name_plural = &#39;Profiles&#39;
  7. classes = (&#39;text-capitalize&#39;,&#39;collapse open&#39;)
  8. extra = 1
  9. list_display = (&#39;avatar_tag&#39;)
  10. fieldsets = (
  11. (&quot;Profile&quot;, {&#39;fields&#39;: (&#39;avatar&#39;,&#39;bio&#39;, &#39;display&#39;,)}),)
  12. class UserProfileAdmin(UserAdmin):
  13. inlines = (UserProfileInline,)

How can I show the avatar image in list view of the User table?

I am not getting any errors in the user list avatar is not shown

Here is the image
Django自定义用户模型图像字段显示在用户列表中

答案1

得分: 1

  1. django.utils.html导入format_html
  2. class UserProfileAdmin(UserAdmin):
  3. list_display = ("avatar_tag",) # 如果你想要的话,可以传递其他字段,比如姓名
  4. def avatar_tag(self, obj):
  5. if obj.userprofile.avatar:
  6. return format_html(
  7. '<img src="%s"/>' % obj.userprofile.avatar.url
  8. )
  9. return "无头像"
英文:

Try this code

  1. from django.utils.html import format_html
  2. class UserProfileAdmin(UserAdmin):
  3. list_display = (&quot;avatar_tag&quot;,) # pass other fileds if you want eg. name
  4. def avatar_tag(self, obj):
  5. if obj.userprofile.avatar:
  6. return format_html(
  7. &#39;&lt;img src=&quot;%s&quot;/&gt;&#39; % obj.userprofile.avatar.url
  8. )
  9. return &quot;No avatar&quot;

list_display accepts callable argument so you can pass custom method names in it.

huangapple
  • 本文由 发表于 2023年5月17日 14:51:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/76269260.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定