Администратор Django скрывает поля и блокирует редактирование / удаление данных - PullRequest
0 голосов
/ 04 октября 2018

В моем проекте django мне нужно выполнить 3 задачи в разделе администратора:

  1. Удалить 2 поля в шаблоне добавления
  2. Удалить возможность удалить запись
  3. Удалить возможность редактировать запись

Моя модель:

class suite_libs(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, blank=True)
    descr = models.TextField(null=True, blank=True)
    docs = models.TextField(null=True, blank=True)
    lib_name = models.CharField(max_length=255, blank=True)
    status = models.CharField(max_length=10, default='APPROVAL')
    f_lib = models.FileField(upload_to='libs/', blank=True)
    notes = models.TextField(null=True, blank=True)

    class Meta:
        verbose_name = 'LIBRARIES'
        verbose_name_plural = 'LIBRARIES'
        ordering = ('name', 'lib_name', 'status',)

    def __str__(self):
        return '%s -> %s (%s)' % (
            str(self.name), str(self.lib_name), str(self.status))

Я пытаюсь это сделать в admin.py:

class suite_libsAdmin(admin.ModelAdmin):

    #1-For hide two fields in add
    def get_form(self, request, obj=None, **kwargs):
        if obj.type == "1":
            self.exclude = ("status", "docs" )
        form = super(suite_libsAdmin, self).get_form(request, obj, **kwargs)
        return form

    #2-For block deletion
    def get_actions(self, request):
        actions = super().get_actions(request)
        if 'delete_selected' in actions:
            del actions['delete_selected']
        return actions

    #3-For block editing   
    def change_view(self, request, obj=None):
        from django.core.urlresolvers import reverse
        from django.http import HttpResponseRedirect
        return HttpResponseRedirect(reverse('admin:myapp_mymodel_changelist'))

.. ноничего не приложено!Поля не скрыты, удаление и изменение всегда активны.Как я могу достичь своих 3 целей?

заранее спасибо

1 Ответ

0 голосов
/ 04 октября 2018

Удалите 2 поля в шаблоне добавления

Этого можно добиться, добавив editable = False к status и docs таким полям:

....
docs = models.TextField(null=True, blank=True, editable= False)
status = models.CharField(max_length=10, default='APPROVAL', editable= False)
....

Удалите возможность удалить запись Удалите возможность редактировать запись

В вашем классе администратора добавьте:

actions = None # to disable delete button
list_display_links = None # to disable edit link

Ваш класс suite_libsAdmin будет выглядеть следующим образом:

class suite_libsAdmin(admin.ModelAdmin):
    actions = None
    list_display_links = None

для получения дополнительной информации обратитесь к документации:

Отключение всех действий для определенного ModelAdmin

Field.editable

...