2013-02-12 2 views
5

필드가 읽기 전용 일 때 django admin 필드에 내 위젯을 표시하려고합니다. 파일이 읽기 전용이 아닌 경우django admin 읽기 전용 필드에 위젯을 표시하는 방법

admin.py는

class AudioTrackAdminInline(admin.StackedInline): 
    model = AudioTrack 
    form = AudioTrackForm 
    readonly_fields = ('file',) 

forms.py

class AudioTrackForm(forms.ModelForm): 
    class Meta: 
     model = AudioTrack 
     widgets = { 'file': MediaFileInput, } # my widget 

, 그것은 위젯 OK 표시합니다. 하지만 내가 읽기 전용으로 포함하면 텍스트 줄이 보입니다. (Django는 내 양식을 읽기 전용으로 사용하지 않습니다.)

어떻게하면 읽기 전용 필드에서도 양식을 사용할 수 있습니까? 내가 읽기 전용 제 분야를 설정하면

또는

어떻게 다른 위젯을 표시하려면?

답변

4

나는 그것이 특징이라고 말할 것이다.

필드가 읽기 전용으로 설정된 경우 Django는 결과를 하드 코드하는 display_for_field 함수를 사용합니다. 사용자 정의 할 수 없습니다.

또 다른 접근법은 필드를 읽기 전용으로 설정하지 않고 formfield_for_dbfield, 문서화되지 않은 ModelAdmin 메서드를 재정의하고 필요에 따라 작동하는 것입니다.

3

대안과보다 유연한 솔루션은 관리자 클래스의 get_form(...) 방법 오버라이드 (override), 읽기 전용 모드로 렌더링 할 해당 필드의 "장애인"속성을 설정하는 것입니다 :

def get_form(self, *args, **kwargs): 

    form = super(SupplierAdmin, self).get_form(*args, **kwargs) 

    for field_name in self.fake_readonly_fields: 
     form.base_fields[field_name].disabled = True 

    return form 

메모를하는 I 이름을 방지하기 위해,하지 보통 self.readonly_fields에서하지만 self.fake_readonly_fields라는 이름의 다른 배열에서 읽기 전용 필드의 이름을하는

제안 된 솔루션의 한계를 중첩 (formfield_for_dbfield를 사용하는) 그런 식으로 당신이로 렌더링이다 같은 방식으로 모든 데이터베이스 필드 ag 주어진 유형 일 경우, 읽기 전용이어야하는지 여부. 이 방법은 전체 양식을 읽기 전용으로 사용해야하는 경우에 적합하지만 절반 읽기 전용이고 절반은 아닌 양식을 처리하는 경우 disabled 특성을 사용하는 것이 좋습니다. 여기 내 대답에

더 자세한 사항은 : 모든 위젯은`django.contrib.gis.forms로 (HTML) 속성 (예를 지원하지 이후 django modeladmin, readonly_fields and boolean fields

+0

이것은'disabled''Field' 속성을 사용해야합니다. fields.PointField'), 사용자가 변경할 수 있습니다! 그래서'form.base_fields [field_name] .disabled = True'가 사용되어야합니다. – blueyed

관련 문제