Django管理员列表点击

时间:2017-09-17 14:58:27

标签: python django web admin

models.py

class Event(models.Model):
    name = models.CharField(max_length=80, blank=False)
    description = models.TextField(blank=True)
    date = models.DateField(blank=True, null=True)
    locked = models.BooleanField(default=False)

admin.py

class EventAdmin(admin.ModelAdmin):
   list_display = ('name', 'date', 'locked')
   search_fields = ['name']
  ordering = ['date']

admin.site.register(Event, EventAdmin)

是否可以更改"锁定"通过单击管理列表中的图标?我已尝试添加" list_editable = ['已锁定']",但红色/绿色图标无法显示。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

好的,我明白了。你可以做到这一点。

def is_locked(self, obj):
    yes_icon = '<img src="/static/admin/img/icon-yes.svg" alt="True">'
    no_icon = '<img src="/static/admin/img/icon-no.svg" alt="False">'

    obj.locked = not obj.locked
    obj.save()

    if obj.locked:
        return '<a href="">%s</a>' % yes_icon
    else:
        return '<a href="">%s</a>' % no_icon

is_locked.allow_tags = True
is_locked.short_description = 'Locked'

答案 1 :(得分:0)

默认情况下,在Django中,列表中的第一个名称是点击,因此您可以使用“锁定”#39;就这样。

list_display = ('locked', 'name', 'date')

或者,您可以在列表视图中使用自定义字段,并在其中附加链接,如下所示:

class EventAdmin(admin.ModelAdmin):
    list_display = ('name', 'date', 'is_locked')
    search_fields = ('name',)
    ordering = ('date',)

    def is_locked(self, obj):
        yes_icon = '<img src="/static/admin/img/icon-yes.svg" alt="True">'
        no_icon = '<img src="/static/admin/img/icon-no.svg" alt="False">'
        if obj.is_tracer:
            return '<a target="_blank" href="%s/change/">%s</a>' % (obj.pk, yes_icon)
        else:
            return '<a target="_blank" href="%s/change/">%s</a>' % (obj.pk, no_icon)

    is_locked.allow_tags = True
    is_locked.short_description = 'Locked'

并在列表视图中添加:

list_display = ('name', 'date', 'is_locked')