Django 관리자 : 모델에서 editable = False '로 표시된 필드를 표시하는 방법은 무엇입니까?


99

'editable=False'모델에 필드가 표시되어 있어도 관리자 페이지에 표시하고 싶습니다. 현재는 필드를 완전히 숨기고 있습니다. 어떻게 이것을 달성 할 수 있습니까?

답변:


195

읽기 전용 필드를 사용합니다 . 그렇게 (django> = 1.2) :

class MyModelAdmin(admin.ModelAdmin):
    readonly_fields=('first',)

6
+1. 특히 Admin에서 필드를 전혀 편집 할 계획 이없는 경우 .
Manoj Govindan

여기서는 작동하지 않습니다 (Django 2.0). 이 필드는 관리자 인터페이스에 표시되지 않습니다.
nerdoc

1
방금 오류를 재현하기 위해 샘플 애플리케이션을 만들었습니다 (django 2.0.8, python 3.5). 이것은 여전히 ​​잘 작동합니다. 앱 @nerdoc에 다른 문제가 있습니까?
tback

죄송합니다. 전형적인 패스트 ​​샷. 테스트하지 않았으며 설치에 문제가있는 것 같습니다. 감사합니다. 죄송합니다.
nerdoc

2
나는이에 추가 할 때 나를 위해 관리자가 추락 fields,하지만 난에 추가 할 때 readonly_fields표시하지 않았다 그것은 둘 다에 추가 한 후이 관리자에 등장 할 때까지.
owenfi

18

최신 정보

이 솔루션은 Admin에서 필드를 편집 가능하게 유지하고 다른 곳에서는 편집 할 수없는 경우에 유용합니다. 이 필드 편집 할을 유지하려면 걸쳐 다음 @Till 박하우스 ' 대답은 더 나은 옵션입니다.

원래 답변

이를 수행하는 한 가지 방법 ModelForm은 관리자 에서 사용자 정의를 사용하는 것 입니다. 이 양식은 필수 필드를 재정 의하여 편집 가능하게 만들 수 있습니다. 따라서 editable=False관리자를 제외한 다른 모든 곳에서 유지 됩니다. 예를 들어 (Django 1.2.3으로 테스트 됨)

# models.py
class FooModel(models.Model):
    first = models.CharField(max_length = 255, editable = False)
    second  = models.CharField(max_length = 255)

    def __unicode__(self):
        return "{0} {1}".format(self.first, self.second)

# admin.py
class CustomFooForm(forms.ModelForm):
    first = forms.CharField()

    class Meta:
        model = FooModel
        fields = ('second',)

class FooAdmin(admin.ModelAdmin):
    form = CustomFooForm

admin.site.register(FooModel, FooAdmin)

1
이것은 적어도 django 1.6에서는 작동하지 않습니다. 양식이 관리자 패널에 올바르게 표시되지만 양식을 저장하고 다시 돌아 오면 양식 값이 다시 기본값이됩니다.
Euphorbium 2014 년

4

읽기 전용 필드는 다음 필드에도 있어야합니다.

fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.