def has_delete_permission(self, request, obj=None): manager = AccessManager(self.model) if manager.check_deleteable(self.model, request) is False: return False if obj: return bool(manager.apply_deleteable(obj.__class__.objects.filter(id=obj.id), request)) return True
def format_callback(obj): has_admin = obj.__class__ in self.admin_site._registry opts = obj._meta no_edit_link = '%s: %s' % (capfirst(opts.verbose_name), force_text(obj)) # Trying to get admin change URL admin_url = None try: admin_url = reverse('%s:%s_%s_change' % (self.admin_site.name, opts.app_label, opts.model_name), None, (quote(obj._get_pk_val()),)) except NoReverseMatch: # Change url doesn't exist -- don't display link to edit pass # Collecting forbidden subobjects, compatible with Django or forced by the option if STRONG_DELETION_CONTROL or has_admin: if not obj.__class__._meta.auto_created: manager = AccessManager(obj.__class__) # filter out forbidden items if manager.check_deleteable(obj.__class__, request) is False: model_perms_needed.add(opts.verbose_name) if not manager.apply_deleteable(obj.__class__._default_manager.filter(pk=obj.pk), request): object_perms_needed.add(obj) if admin_url: # Display a link to the admin page. return format_html('{}: <a href="{}">{}</a>', capfirst(opts.verbose_name), admin_url, obj) else: # Don't display link to edit, because it either has no # admin or is edited inline. return no_edit_link