Я пытаюсь получить 2 ссылки в представлении списка изменений администратора (изменение и просмотр) на основе Django разрешений («можно изменять» и «можно редактировать») на каждой имеющейся у меня модели.
I хочу иметь общий c способ и не хочу копировать код во всех моих ModelAdmins. Как я могу это сделать?
class MyModelAdmin(admin.ModelAdmin):
list_display = ('admin_action_column', 'name')
# get user to changelist view (permission checks)
def changelist_view(self, request, *args, **kwargs):
self.user = request.user
return super().changelist_view(request, *args, **kwargs)
def admin_action_column(self, obj):
admin_link_s = ""
app_label = self.model._meta.app_label
model_name = self.model._meta.model_name
if self.user.has_perm(f'{app_label}.view_{model_name}'):
admin_link_s += obj.admin_get_view_link()
if self.user.has_perm(f'{app_label}.change_{model_name}'):
admin_link_s += obj.admin_get_change_link()
return mark_safe(admin_link_s)
admin_action_column.short_description = ''
admin.site.register(MyModel, MyModelAdmin)