Отключите ссылку для редактирования объекта в администраторе django (только дисплейный список)?

Как уже говорилось много раз - с div ~ p выбраны все элементы

, которым предшествует элемент

.

Проверьте этот список все селектор CSS.

43
задан thornomad 24 October 2009 в 18:42
поделиться

5 ответов

Мне нужен был только просмотрщик журнала в виде списка.

Я заставил его работать следующим образом:

class LogEntryAdmin(ModelAdmin):
    actions = None
    list_display = (
        'action_time', 'user',
        'content_type', 'object_repr', 
        'change_message')

    search_fields = ['=user__username', ]
    fieldsets = [
        (None, {'fields':()}), 
        ]

    def __init__(self, *args, **kwargs):
        super(LogEntryAdmin, self).__init__(*args, **kwargs)
        self.list_display_links = (None, )

Это своего рода микс между обоими ответами.

Если вы просто сделаете самостоятельно. list_display_links = () покажет ссылку, так или иначе, потому что код template-tag (templatetags/admin_list.py) снова проверяет, не пуст ли список.

.
60
ответ дан 26 November 2019 в 22:27
поделиться

В более "недавних" версиях Django, так как по крайней мере 1,9, это возможно к простому, определяют добавление, изменяют и удаляют полномочия на администраторском классе. Посмотрите django администраторская документация для ссылки. Вот пример:

@admin.register(Object)
class Admin(admin.ModelAdmin):

    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        return False
0
ответ дан 26 November 2019 в 22:27
поделиться

Невозможно достичь необходимого уровня контроля над представлением в обычном текстовом поле.

Если вас это устраивает, попробуйте CodeMirror или Ace (ранее skywriter и bespin ) , или Monaco (используется в MS VSCode).

Из дублирующей ветки - обязательная ссылка на википедию: http: //en.wikipedia.

1
ответ дан 26 November 2019 в 22:27
поделиться

Нет поддерживаемого способа сделать это.

Глядя на код, кажется, что он автоматически устанавливает ModelAdmin.list_display_links в первый элемент, если вы ничего не устанавливаете. Таким образом, самым простым способом может быть переопределение метода __ init __ в вашем подклассе ModelAdmin , чтобы отключить этот атрибут при инициализации:

class HitAdmin(admin.ModelAdmin):
    list_display = ('user','ip','user_agent','hitcount')
    search_fields = ('ip','user_agent')
    date_hierarchy = 'created'

    def __init__(self, *args, **kwargs):
        super(HitAdmin, self).__init__(*args, **kwargs)
        self.list_display_links = []

Это сработает после очень беглого теста. Я не могу гарантировать, что это не повредит что-либо еще где-либо или что он не будет нарушен будущими изменениями в Django.

Редактировать после комментария :

Нет необходимости исправлять исходный код, это сработает:

    def __init__(self, *args, **kwargs):
        if self.list_display_links:
            unset_list_display = True
        else:
            unset_list_display = False
        super(HitAdmin, self).__init__(*args, **kwargs)
        if unset_list_display:
            self.list_display_links = []

Но я очень сомневаюсь, что какой-либо патч будет принят в Django, поскольку это нарушает то, что код явно делает в данный момент.

2
ответ дан 26 November 2019 в 22:27
поделиться

В вашей модели администратор установил:

list_display_links = (None,)

Это должно сработать. (В любом случае работает в 1.1.1.)

Ссылка на документы: list_display_links

7
ответ дан 26 November 2019 в 22:27
поделиться