Framework/Django

Django - admin 사이트를 직관적으로 쓰기

청렴결백한 만능 재주꾼 2021. 4. 7. 23:33
반응형

사이드 프로젝트에서 장고를 쓰고 있다. 장고 admin을 사용하는데 유용했던 것이 있다.

 

 

 

1. 객체 표현

 

기본 어드민 설정

 

퀴즈 오브젝트로 표현됨

 

 


이럴 때에 아래처럼 models.py에 디스플레이 될 이름을 넣어준다. 

#quiz/models.py

class Quiz(models.Model):
    name        = models.CharField(max_length=100)
    teacher     = models.ForeignKey('teacher.Teacher', on_delete=models.SET_NULL, null=True)
    video_url   = models.URLField(max_length=200)
    tester      = models.ManyToManyField('member.Account', related_name='quiz', through='AccountQuiz')

    class Meta:
        db_table = 'quizzes'
    
    def __str__(self):
        return self.name

 

 

 

그러면 

이렇게 변하는 것을 확인할 수 있다. 

 

 

 

 

2. 리스트 보여주는 것

#Quiz/admin.py

class QuestionAdmin(admin.ModelAdmin):
    list_display        = ('question','correct_answer','quiz_display')
    list_display_links  = ('question',)
    inlines = [AnswerChoiceInline]
    
class AnswerChoiceInline(admin.TabularInline):
    model = AnswerChoice

사실상 문제를 내면서 같이 객관식의 선택지를 넣으면 좋기 때문에 inline처리를 하였다. 

 

list_display로 인해 

좀 더 괜찮게 볼 수 있다. 저기 list_display 에 있는 quiz_display는   Models.py에서 설정해주어야 한다.

#Quiz models.py

class Question(models.Model):
    question        = models.CharField(max_length=100)
    quiz            = models.ForeignKey('Quiz', on_delete=models.SET_NULL, null=True)
    correct_answer  = models.CharField(max_length=20)

    class Meta:
        db_table = 'questions'
    
    def __str__(self):
        return self.question
    
    def quiz_display(self):
        return self.quiz
    
    quiz_display.short_description = "Quiz"

그럼 외래키까지 리스트에 디스플레이를 할 수 있다.

 

그리고 아래는 인라인을 처리함으로써 얻을 수 있는 화면이다.

 

 

인라인 처리를 하지 않았다면 문제를 출제하고 옵션은 다른 창에서 설정해야 할 것이다.

반응형