Django Admin : 하나의 모델 필드에만 사용자 정의 위젯 사용
나는이 DateTimeField의 내 모델에서 필드. Django 관리 사이트에서 체크 박스 위젯으로 표시하고 싶었습니다. 이를 위해 사용자 지정 양식 위젯을 만들었습니다. 그러나이 하나의 필드 에만 사용자 정의 위젯을 사용하는 방법을 모릅니다 .
장고 문서 에 대한 사용자 정의 위젯을 사용하는 방법에 대해 설명 모든 특정 유형의 필드 :
class StopAdmin(admin.ModelAdmin):
formfield_overrides = {
models.DateTimeField: {'widget': ApproveStopWidget }
}
그러나 이것은 충분히 세분화되지 않았습니다. 한 필드 에 대해서만 변경하고 싶습니다 .
ModelAdmin에 대한 사용자 정의 ModelForm을 만들고 다음과 같이 Meta 클래스에 '위젯'을 추가합니다.
class StopAdminForm(forms.ModelForm):
class Meta:
model = Stop
widgets = {
'approve_ts': ApproveStopWidget(),
}
fields = '__all__'
class StopAdmin(admin.ModelAdmin):
form = StopAdminForm
끝난!
이에 대한 문서는 관리자 문서에 언급 된 언급없이 ModelForm 문서에 직관적이지 않게 배치됩니다. 참조 : 모델에서 양식 생성
파고 후 관리 , 모델 필드 및 양식 필드 코드는 내가 유일한 방법은 내가 정의 모델 필드를 만드는 것입니다 원하는 것을 수행하기 위해 생각 :
models.py
from django.db import models
from widgets import ApproveStopWidget
class ApproveStopModelField(models.DateTimeField):
pass
class Stop(models.model):
# Other fields
approve_ts = ApproveStopModelField('Approve place', null=True, blank=True)
admin.py
from widgets import ApproveStopWidget
from models import ApproveStopModelField
class StopAdmin(admin.ModelAdmin):
formfield_overrides = {
ApproveStopModelField: {'widget': ApproveStopWidget }
}
작업이 완료됩니다.
당분간 나는 명백한 것을 놓치는 습관이 있기 때문에 질문에 답하지 않을 것입니다. 아마도 일부 Django smartypants가 더 나은 솔루션을 가지고있을 것입니다.
다음과 같이 formfield_for_dbfield를 재정의합니다.
class VehicleAdmin(admin.ModelAdmin):
search_fields = ["name", "colour"]
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'colour':
kwargs['widget'] = ColourChooserWidget
return super(VehicleAdmin, self).formfield_for_dbfield(db_field,**kwargs)
Django's ModelAdmin.get_changelist_form(self, request, **kwargs) will do the trick for the case of list_editable
class StopAdminForm(forms.ModelForm):
class Meta:
model = Stop
widgets = {
'approve_ts': ApproveStopWidget(),
}
class StopAdmin(admin.ModelAdmin):
form = StopAdminForm
#just return the ModelForm class StopAdminForm
def get_changelist_form(self, request, **kwargs):
return StopAdminForm
Refer to Django Official documentation on this topic
I hope this will help
'Programing' 카테고리의 다른 글
Swift를 사용하여 하나의 ViewController에서 강제 가로 모드 (0) | 2020.12.10 |
---|---|
IPython 노트북 셀 다중 출력 (0) | 2020.12.10 |
jQuery를 사용하여 JSON 배열에 대한 루프 및 키 / 값 쌍 가져 오기 (0) | 2020.12.10 |
두 색상 사이의 중간 색상을 얻으려면 어떻게해야합니까? (0) | 2020.12.10 |
Swift를 사용하여 IOS 8의 Numpad에 "완료"버튼을 추가하는 방법은 무엇입니까? (0) | 2020.12.10 |