Cette fois, nous personnaliserons le formulaire d'administration.
Vérifions le formulaire d'administration actuel.
polls/admin.py
from django.contrib import admin
# Register your models here.
from .models import Question
admin.site.register(Question)
Lorsque vous accédez à "http://127.0.0.1:8000/admin/polls/question/5/change/", le message suivant s'affiche.
Modifiez admin.py pour personnaliser le formulaire d'administration. Créez une classe QuestionAdmin et modifiez l'ordre d'affichage de question_text et pub_date. À l'origine, c'était pub_date sous question_text, mais dans le code ci-dessous, ce sera question_text sous pub_date.
polls/admin.py
from django.contrib import admin
# Register your models here.
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['question_text', 'pub_date']
admin.site.register(Question, QuestionAdmin)
polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
J'ai pu confirmer que la question est affichée, mais n'est-il pas possible d'afficher le choix associé à la question en même temps? Nous allons procéder avec le tutoriel.
polls/admin.py
from django.contrib import admin
from .models import Question, Choice
admin.site.register(Choice)
Le choix a été ajouté. Les questions associées à l'option "Le ciel" ne peuvent pas être confirmées sans ouvrir l'option. Vous pouvez voir que l'option "Le ciel" est liée à la question "Qu'est-ce que c'est?".
Affiche les questions et les choix en même temps. ChoiceInline spécifie qu'il souhaite afficher trois champs de choix vides.
polls/admin.py
from django.contrib import admin
# Register your models here.
from .models import Question, Choice
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)
La question "Qu'est-ce que c'est?" A des choix "Pas beaucoup" et "Le ciel" avec trois champs de choix vides. 。
Puisque l'affichage des choix est verticalement long, modifions-le pour qu'il s'affiche au format tableau.
polls/admin.py
class ChoiceInline(admin.TabularInline):
Il est affiché dans un format de tableau et est soigné.
La liste des modifications est le contenu affiché sur "http://127.0.0.1:8000/admin/
polls/admin.py
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')
Ouvrez "http://127.0.0.1:8000/admin/polls/question/". Jusqu'à présent, seule la colonne "TEXTE DE LA QUESTION" était disponible, mais de nouvelles colonnes "DONNÉES PUBLIÉES" et "PUBLIÉES RÉCEMMENT?" Ont été ajoutées.
Les colonnes "QUESTION TEXT" et "DATA PUBLISHED" prennent en charge le tri. En revanche, la colonne "PUBLIÉ RÉCEMMENT?" Ne prend pas en charge le tri, car elle affiche la valeur de retour de la méthode.
Utilisons le filtre pour affiner par "PUBLIÉ RÉCEMMENT?".
polls/models.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('data published')
def __str__(self):
return self.question_text
def was_published_recently(self):
return timezone.now() - datetime.timedelta(days=1) <= self.pub_date <= timezone.now()
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
Ajoutez list_filter.
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')
list_filter = ['pub_date']
Le filtre s'affiche dans la barre latérale. Vous pouvez affiner par "Toutes les périodes (" N'importe quelle date ")" "Aujourd'hui (" Aujourd'hui ")" "Cette semaine (" 7 derniers jours ")" "Ce mois (" Ce mois ")" "Cette année (" Cette année ")" Je vais.
Ensuite, créez une fenêtre de recherche.
polls/admin.py
search_fields = ['question_text']
Une fenêtre de recherche était affichée en haut de l'écran.
C'est la fin. Merci beaucoup.
Recommended Posts