Рассмотрим веб-приложение Word-A-Day Django, которое каждый день представляет пользователю словарное слово, при этом сложность слова возрастает с «обычного» в понедельник до «неясного» в пятницу.
Модели в models.py
выглядят следующим образом:
class WordADay(models.Model):
"""A vocabulary word and its assigned day"""
date = models.DateField(
help_text="The date to post the selected word"
)
word = models.ForeignKey(
Words,
help_text="The selected vocabulary word"
)
class Word(models.Model):
"""Vocabulary words"""
OBSCURITY_CHOICES = [(1,'Monday'),
(2,'Tuesday'),
(3,'Wednesday'),
(4,'Thursday'),
(5,'Friday')]
word = models.CharField(
max_length=32,
help_text="A vocabulary word"
)
difficulty = models.PositiveSmallIntegerField(
choices=OBSCURITY_CHOICES,
help_text="How obscure the word is"
)
На странице администратора «добавить» для модели WordADay я хочу иметь возможность сначала выбрать день из стандартного селектора календаря для ' дата 'поле. После выбора я хотел бы, чтобы параметры в раскрывающемся селекторе для поля 'word' автоматически фильтровались только для тех экземпляров модели Word, которые имеют правильную сложность, где «1» соответствует дате понедельника, а « 5 ", что соответствует дате пятницы. То есть, я хотел бы отфильтровать параметры внешнего ключа в соответствии со значением, выбранным для другого поля.
Для обсуждения я могу предоставить скелет admin.py
from django.contrib import admin
from .models import WordADay, Word
from django.db import models
@admin.register(WordADay)
class WordADayAdmin(admin.ModelAdmin):
pass
@admin.register(Word)
class WordAdmin(admin.ModelAdmin):
pass
хотя, конечно, он не полный, потому что я не знаю, что в него вставлять.
Через пару часов копания в документации я обнаружил свойство list_filter
, описанное как
Установить list_filter для активации фильтров в правой боковой панели страницы списка изменений администратора
Это не то, что я хочу; Мне нужен фильтр на странице «добавить», а не на странице «изменить», и мне не нужна боковая панель, я хочу, чтобы фильтр был автоматически c после выбора даты.
Это это возможно без создания нового AdminSite с нуля?