Django Admin:如何更新/更改list_display本身的图像,而无需打开条目的更改表单

时间:2017-06-05 14:24:00

标签: python django django-models django-admin

我的models.py看起来像

class User_Detail(models.Model):
    user_image = models.ImageField(upload_to='users',default = 'users/profile.png')
    user_image_thumbnail = ImageSpecField(source='user_image',
                                      processors=[ResizeToFill(75, 100)],
                                      format='JPEG',
                                      options={'quality': 60})

我的Admin.py看起来像

class UserAdmin(admin.ModelAdmin):
    list_display = ('profile_pic',)

    def profile_pic(self, obj):  # receives the instance as an argument
        url = reverse('admin:%s_%s_change' %(obj._meta.app_label,  obj._meta.model_name),  args=[obj.id] )
        url_string = '<a style="margin: 2px;" href="%s">Update</a>' %(url)
        return '<img width=75 height=75 src="{thumb}" />'.format(
            thumb=obj.user_image_thumbnail.url,
        ) + url_string
    profile_pic.allow_tags = True
    profile_pic.short_description = 'User Picture'

我希望django管理员通过在显示的缩略图旁边提供更新按钮来更新管理列表显示本身的图像字段,并保存它而无需打开条目的更改表单。 我正在使用django-imagekit生成缩略图。

1 个答案:

答案 0 :(得分:0)

list_editable用于编辑django管理列表中的字段,而无需转到更改表单。 但是,应注意使用list_editable以下几点:

  • list_editable中的字段也应包含在list_display
  • 同一字段不能用作link更改表单和list_editable

你的admin.py应该是:

class UserAdmin(admin.ModelAdmin):
    // "id" can be replaced by any other field to use as link
    list_display = ('id', 'profile_pic',)
    list_editable = ('profile_pic',)

    // rest of the code

有关https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_editable

的更多信息