[PYTHON] 장고 관리자 - 모든 필드를 읽기 전용으로 만들기
PYTHON장고 관리자 - 모든 필드를 읽기 전용으로 만들기
모든 필드를 명시 적으로 명시하지 않고 읽기 전용으로 만들려고합니다.
같은 것 :
class CustomAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
if request.user.is_superuser:
return self.readonly_fields
return self.fields
문제는이 시점에서 CustomAdmin.fields가 설정되어 있지 않다는 것입니다.
어떤 아이디어?
해결법
-
==============================
1.조심성있는, self.model._meta.fields는 반드시 CustomAdmin과 동일한 필드가 아닙니다!
조심성있는, self.model._meta.fields는 반드시 CustomAdmin과 동일한 필드가 아닙니다!
"관리자의 모든 분야"는 다음과 같이 보입니다.
from django.contrib import admin from django.contrib.admin.utils import flatten_fieldsets class CustomAdmin(admin.ModelAdmin): def get_readonly_fields(self, request, obj=None): if request.user.is_superuser: return self.readonly_fields if self.declared_fieldsets: return flatten_fieldsets(self.declared_fieldsets) else: return list(set( [field.name for field in self.opts.local_fields] + [field.name for field in self.opts.local_many_to_many] ))
-
==============================
2.좋아, 이제이게있다.
좋아, 이제이게있다.
class CustomAdmin(admin.ModelAdmin): def get_readonly_fields(self, request, obj=None): # ... return [f.name for f in self.model._meta.fields]
아직도 덜 못생긴 방법을 찾고 있습니다.
-
==============================
3.모델 메타 필드를 반복 할 수 있습니다.
모델 메타 필드를 반복 할 수 있습니다.
def get_readonly_fields(self, request, obj=None): if obj: self.readonly_fields = [field.name for field in obj.__class__._meta.fields] return self.readonly_fields
-
==============================
4.인라인 (탭 또는 스택)
인라인 (탭 또는 스택)
def get_readonly_fields(self, request, obj=None): fields = [] for field in self.model._meta.get_all_field_names(): if field != 'id': fields.append(field) return fields def has_add_permission(self, request): return False
-
==============================
5.이 장고 1.10 함께 나를 위해 일했다.
이 장고 1.10 함께 나를 위해 일했다.
def get_readonly_fields(self, request, obj=None): if request.user.is_superuser: return self.readonly_fields return list(set( [field.name for field in self.opts.local_fields] + [field.name for field in self.opts.local_many_to_many] ))
-
==============================
6.나의 요구 사항은 비슷했다. 읽기 전용으로 표시하려면 하나의 입력란 만 있으면됩니다. 그리고 이것은 잘 작동했습니다 :
나의 요구 사항은 비슷했다. 읽기 전용으로 표시하려면 하나의 입력란 만 있으면됩니다. 그리고 이것은 잘 작동했습니다 :
class ChoiceInline(admin.TabularInline): model = Choice extra = 1 fields = ['choice_text', 'votes'] readonly_fields = ['votes'] class QuestionAdmin(admin.ModelAdmin): #fields = ['pub_date', 'question_text'] fieldsets = [ (None, {'fields': ['question_text']}), ('Date Information', {'fields': ['pub_date']}), ] search_fields = ['question_text'] inlines = [ChoiceInline]
참조 : C : \ Python27 \ Lib \ site-packages \ django \ contrib \ admin \ options.py
-
==============================
7.당신은 이것을 만들 수 있습니다 :
당신은 이것을 만들 수 있습니다 :
class CustomAdmin(admin.ModelAdmin): def has_change_permission(self, request, obj=None): return False
-
==============================
8.get_fieldsets를 사용하면 폼의 모든 필드를 가져옵니다.
get_fieldsets를 사용하면 폼의 모든 필드를 가져옵니다.
def get_readonly_fields(self, request, obj=None): readonly = [] for fs in self.get_fieldsets(request, obj): if len(fs) > 1: readonly += fs[1].get('fields', []) return readonly
from https://stackoverflow.com/questions/13817525/django-admin-make-all-fields-readonly by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] gflags없이 Google 애널리틱스 자격증 명을 얻는 방법 - run_flow ()를 대신 사용 하시겠습니까? (0) | 2018.11.29 |
---|---|
[PYTHON] 파이썬에서 오버랩 컴퓨팅을위한 내장 함수 (0) | 2018.11.29 |
[PYTHON] 다중 매개 변수 괄호가있는 파이썬 함수 (0) | 2018.11.29 |
[PYTHON] 파이썬에서 두 날짜 문자열 비교하기 (0) | 2018.11.29 |
[PYTHON] TypeError : b'1 '은 JSON 직렬 가능하지 않습니다. (0) | 2018.11.29 |