Поля только для чтения в django admin / inline - PullRequest
10 голосов
/ 29 января 2010

Я использую этот фрагмент , чтобы показывать несколько полей в моей административной панели как только для чтения, но, как отмечалось в комментариях, он не работает для stackedinline / tabularinline. Есть ли другой способ добиться этого? У меня есть список объектов, прикрепленных к модели, и я просто хочу показать его в подробном представлении модели без возможности изменения значений.

Ответы [ 3 ]

18 голосов
/ 29 января 2010

Если вы используете Django 1.3 или новее; есть атрибут с именем ModelAdmin.readonly_fields , который вы можете использовать.

InlineModelAdmin наследуется от ModelAdmin, поэтому вы можете использовать его из встроенного подкласса.

2 голосов
/ 17 февраля 2010

Я столкнулся с той же проблемой сегодня.Вот мое решение.Это пример поля только для чтения для значения ForeignKey:

class MySelect(forms.Select):
    def render(self, name, value, attrs=None, choices=()):
        s = Site.objects.get(id=value)
        return s.name

class UserProfileInlineForm(forms.ModelForm):
    site = forms.ModelChoiceField(queryset=Site.objects.all(), widget=MySelect)

class UserProfileInline(admin.StackedInline):
    model = UserProfile
    form = UserProfileInlineForm
0 голосов
/ 13 июня 2013

Как и в случае с JQuery, кажется, что вы можете достичь этого, изменив attr с именем «disabled» (работает в моем Safari, хорошо, мы сейчас в 2013 году :-)). Пример ниже:

def get_form(self, request, obj=None, **kwargs):
        result = super(<your ModelAdmin class here>, self).get_form(request, obj=obj, **kwargs)
        result.base_fields[<the select field you want to disable>].widget.attrs['disabled'] = 'disabled'
        return result
...