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의 설정값을 추가해준다.