Back-End/Python Django

[Django] [admin page]각 필드 분리해서 보기

Hoplin 2022. 2. 16. 15:22
반응형

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

 

The Django admin site | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

만약 여기서 각 필드를 분리해서 보고싶다고 가정한다면 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페이지에 가면 아래와 같이 필드가 접히는것을 볼 수 있다.

반응형