【发布时间】:2020-05-29 00:25:13
【问题描述】:
考虑一个 Word-A-Day Django webapp,它每天向用户展示一个词汇单词,单词的难度从星期一的“普通”增加到星期五的“晦涩”。
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 模型实例,“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 以激活管理员更改列表页面右侧边栏中的过滤器
这不是我想要的;我想要“添加”页面上的过滤器,而不是“更改”页面,并且我不想要侧边栏,我希望在选择日期后自动过滤。
如果不从头创建新的 AdminSite,这是否可能?
【问题讨论】:
标签: django django-admin