2010-01-29 4 views
10

나는 내 관리자 백엔드에서 여러 필드를 읽기 전용으로 표시하기 위해 this snippet을 사용하지만 주석에 표시된 것처럼 스택 라인/tabularinline에서는 작동하지 않습니다. 이것을 달성 할 다른 방법이 있습니까? 모델에 첨부 된 객체 목록을 가지고 있으며 값을 변경하지 않고 모델의 세부 정보 뷰에 표시하려고합니다.장고 관리/인라인의 Readonly 필드

답변

17

Django 1.3 이상을 실행중인 경우; 사용할 수있는 ModelAdmin.readonly_fields이라는 속성이 있습니다.

InlineModelAdminModelAdmin에서 상속되므로 인라인 하위 클래스에서 사용할 수 있습니다.

+0

덕분에, 불행하게도, 내가 dev에 버전을 사용할 수 없습니다 생산 시스템이다. – schneck

+0

FYI : 현재 생산중인 것으로 보입니다 (Django 1.3 있음) –

+0

고마워요. 그에 따라 답변을 업데이트했습니다. :) – drmegahertz

2

오늘 같은 문제가 발생했습니다. 여기 내 해결책이있다. OK 우리가 ', JQuery와의 경우와 마찬가지로

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

, 당신이 내 사파리에서 "장애인"(작품이라는 ATTR을 변경하여이를 달성 할 수있는 것 :이 외래 키 값에 대한 읽기 전용 필드의 예입니다 지금 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