Computer Science/BackEnd

장고 | 장고 공식 문서 내용 정리 #1-8 Getting started : writing your first Django app, part 7

토마토. 2022. 9. 8. 09:02
첫 장고 앱 만들기 #7
admin 양식 커스텀하기
from django.contrib import admin
from .models import Question, Choice
# Register your models here.

class QuestionAdmin(admin.ModelAdmin):
    fields=['pub_date', 'question_text']
    
admin.site.register(QuestionAdmin)
admin.site.register(Choice)

admin에서 모델을 보여주는 방식을 바꾸어주었다. 

 

from django.contrib import admin
from .models import Question, Choice
# Register your models here.

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date']}),
    ]
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

이런식으로 바꾸어주면, 이제 질문에 대한 세부 페이지에서 여러 항목을 보여주게 된다. 

 

모델 추가하기
from django.contrib import admin
from .models import Question, Choice
# Register your models here.

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3
    
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date'], 'classes':['collapse']}),
    ]
    inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

 

admin 리스트 커스텀하기
from django.contrib import admin
from .models import Question, Choice
# Register your models here.

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3
    
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date'], 'classes':['collapse']}),
    ]
    inlines = [ChoiceInline]
    list_display = ('question_text', 'pub_date', 'was_published_recently')
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

list_display로 모델이 display되는 열 순서를 정해준다. 

 

from django.db import models
from django.utils import timezone
from django.contrib import admin
import datetime

# Create your models here.
class Question(models.Model):
    def __str__(self):
        return self.question_text
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    @admin.display(
        boolean = True, 
        ordering='pub_date', 
        description = 'Published recently?',
    )
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now
    
class Choice(models.Model):
    def __str__(self):
        return self.choice_text
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

models.py 에서 @admin.display의 설정값을 추가해준다.