Django4.1后台能否为Phrase模型添加Unit虚拟字段过滤?
可行,实现方法如下
你定义的unit是Python层面的@property属性,Django ORM无法直接基于它做数据库层面的筛选,但可以通过Phrase关联的Exercise模型的unit字段来实现筛选——Django Admin支持通过双下划线__跨关联模型指定筛选字段。
具体实现步骤:
- 在Phrase对应的Admin类中,修改
list_filter配置,直接指定关联路径:
from django.contrib import admin from .models import Phrase class PhraseAdmin(admin.ModelAdmin): # 直接通过exercise__unit关联筛选 list_filter = ('exercise__unit',)
- 如果希望筛选器只显示当前Phrase关联到的Unit(而非系统中所有Unit),可以使用
RelatedOnlyFieldListFilter:
class PhraseAdmin(admin.ModelAdmin): list_filter = ( ('exercise__unit', admin.RelatedOnlyFieldListFilter), )
配置完成后,Django Admin后台的Phrase列表页会出现按Unit筛选的选项,点击对应Unit即可过滤出关联到该Unit的所有Phrase。
内容的提问来源于stack exchange,提问作者Kifsif
相关产品推荐
相关产品推荐

