views.py & admin.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField(verbose_name='date_published')
def __str__(self):
return self.question_text
위와 같은 모델 하나가 정의되어있다고 가정하자 그리고 admin.py에 아래와 같이 입력해 어드민 사이트에 등록했다고 가정하자
admin.site.register(Question)
이 형태에서 기본적으로 아래와 같이 어드민 페이지에 데이터 입력창이 나온다
필드 분리
Document : https://docs.djangoproject.com/en/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fieldsets
만약 여기서 각 필드를 분리해서 보고싶다고 가정한다면 admin.ModelAdmin 클래스를 상속받는 클래스를 하나 정의한 다음 fieldsets변수를 설정하면 된다. fieldset에 있는 각 튜플의 첫번째 인자가 해당 필드의 제목이 되며, 두번째 인자의 딕셔너리에서 fields키값에 대한 v리스트에 있는 값들이 필드별 입력 항목이 된다. 두번째 인자의 딕셔너리 key값을fields로 꼭 해주어야 하며, 변경해줄 수 없다.
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('Question Statement',{'fields' : ['question_text']}),
('Date Information', {'fields' : ['pub_date']}),
('Test',{'fields' : ['test']})
]
admin.site.register(Question,QuestionAdmin)
한가지 궁금증이 들어서 추가로 해본것은 이 두번째 인수의 fields키값의 리스트에 입력 항목을 원하는 순서대로 넣으면 적용될까? 이다.
<테스트 1>
# Register your models here.
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('Question Statement',{'fields' : ['question_text']}),
('Date Information', {'fields' : ['pub_date','test']}),
]
admin.site.register(Question,QuestionAdmin)
<테스트 2>
# Register your models here.
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('Question Statement',{'fields' : ['question_text']}),
('Date Information', {'fields' : ['test','pub_date']}),
]
admin.site.register(Question,QuestionAdmin)
보면 입력항목 순서가 적용되는것을 볼 수 있다.
필드 접기
조금 더 나아가 필드를 접을 수 도 잇다. 필드 순서 변경, 필드 분리 및 지금 진행하려는 필드 접기 기능 등은 모두 필드 개수가 많아 폼이 길어진 경우 유용하게 사용할 수 있다. 위에 코드에서 두번째 인자 딕셔너리에 'classes'라는 키를 가지는 쌍을 추가로 작성하고 value로 'collapse'가 담긴 리스트를 입력해주면된다. classes는 필드셋에 대해 추가적인 CSS를 적용하게 해주는 속성이다.
# models.py
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField(verbose_name='date_published')
def __str__(self):
return self.question_text
# views.py
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('Question Statement',{
'fields' : ['question_text'],
}),
('Date Information', {
'fields' : ['pub_date'],
'classes' : ['collapse']
}),
]
admin.site.register(Question,QuestionAdmin)
이를 적용한 후 admin페이지에 가면 아래와 같이 필드가 접히는것을 볼 수 있다.
'Back-End > Python Django' 카테고리의 다른 글
[Django][admin page] list_filter필터 (0) | 2022.02.18 |
---|---|
[Django] [admin page]레코드 리스트 컬럼 지정하기 (0) | 2022.02.18 |
[Django] [admin page] ForeignKey설정된 모델들을 한 화면에서 CRUD하기 (0) | 2022.02.18 |
[Django] [admin page]필드 순서 변경하기 (0) | 2022.02.16 |
[Django] django의 애플리케이션 개발방식 (0) | 2022.01.23 |