반응형
사이드 프로젝트에서 장고를 쓰고 있다. 장고 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"
그럼 외래키까지 리스트에 디스플레이를 할 수 있다.
그리고 아래는 인라인을 처리함으로써 얻을 수 있는 화면이다.
인라인 처리를 하지 않았다면 문제를 출제하고 옵션은 다른 창에서 설정해야 할 것이다.
반응형
'Framework > Django' 카테고리의 다른 글
Django - Admin 에서 수정/삭제/추가 방지하기 (0) | 2021.07.19 |
---|---|
Django 장고 admin 어드민 method 메소드 unknown field Error (0) | 2021.04.21 |
Django-UnitTest(유닛테스트) (0) | 2020.06.16 |
프로젝트시작할 때 장고 이니셜 세팅 (0) | 2020.06.08 |
치팅 노트 (0) | 2020.06.02 |