如何在Django Admin中展示is_approved=0的Restaurant模型子集数据
在Django Admin中创建仅展示未审核餐厅的独立表格
没错,你确实需要通过自定义ModelAdmin类来实现这个需求,操作起来其实很简单,我给你一步步拆解:
1. 编写自定义ModelAdmin类
在你的应用的admin.py文件里,创建一个专门的ModelAdmin子类,重写get_queryset方法来过滤出is_approved=False的记录。同时你还可以自定义这个Admin页面要展示的字段、搜索功能等:
from django.contrib import admin from .models import Restaurant class UnapprovedRestaurantAdmin(admin.ModelAdmin): # 定义列表页要显示的字段,按需调整 list_display = ('rest_owner', 'email_sent', 'is_approved') # 可选:添加搜索功能,比如按餐厅所有者的用户名搜索 search_fields = ('rest_owner__username',) # 重写queryset,只返回未审核的餐厅 def get_queryset(self, request): # 先获取默认的queryset queryset = super().get_queryset(request) # 过滤出is_approved为False的记录 return queryset.filter(is_approved=False)
2. 注册自定义Admin到站点
接下来把这个自定义的Admin注册到Django Admin站点里。如果你的Restaurant模型之前已经注册过默认的Admin,只需要在注册时指定一个独特的name参数,就能在Admin侧边栏生成一个独立的入口:
# 先注册默认的Admin(展示所有餐厅记录) admin.site.register(Restaurant) # 再注册自定义的未审核餐厅Admin,name参数避免重复注册冲突 admin.site.register(Restaurant, UnapprovedRestaurantAdmin, name='UnapprovedRestaurants')
配置完成后重启Django服务,进入Admin后台就能看到两个独立的菜单选项:一个是原来的「Restaurants」(展示所有餐厅),另一个是「Unapproved Restaurants」(只展示未审核的餐厅),完全满足你的需求。
内容的提问来源于stack exchange,提问作者gamer
相关产品推荐
相关产品推荐

