模型.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)
管理员.py
class EventAdmin(admin.ModelAdmin):
list_display = ('name', 'date', 'locked')
search_fields = ['name']
ordering = ['date']
admin.site.register(Event, EventAdmin)
是否可以通过单击管理列表中的图标来更改“锁定”?我尝试添加“list_editable = ['locked']”,但红色/绿色图标不可见。
感谢您的帮助:)
好的,我明白了。您可以这样做来使其发挥作用。
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'
默认情况下,在 Django 中,列表中的第一个名称将是点击的名称,因此您可以通过这种方式使用“锁定”。
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')
你可以使用
list_editable = ['locked']
将其显示为复选框并显示“保存”按钮!