当我们使用Django
后台admin
管理后台时,如何根据字段名筛选不同的内容,本文将通过实例介绍如何实现,有如下两模型
class User(models.Model): name = models.CharField(max_length=50, verbose_name="名字") is_staff = models.BooleanField(default=False, verbose_name="是否管理员") class Article(models.Model): author = models.ForeignKey(User, verbose_name="作者", on_delete=models.PROTECT) title = models.CharField(max_length=150, verbose_name="文章标题")
我们在admin.py
注册两个模型
@admin.register(User) class UserAdmin(admin.ModelAdmin): list_display = ("name", "is_staff") @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ("id", "title", "author")
现在我们先使用python manage.py createsuperuser
创建一个超级用户,然后在进入后台创建一个普通的用户,接下来我们开始创建一篇文章
可以看到,当我们有多个用户时,会出现上图的选项,但我们只想选管理员用户时,就不是很清晰,我们可以通过修改ArticleAdmin
来实现这一需求,我们可以将我们原来的ArticleAdmin
修改为如下:
@admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ("id", "title", "author") def formfield_for_dbfield(self, db_field, **kwargs): """选择文章作者时只显示superuser""" if db_field.name == 'author': kwargs['queryset'] = User.objects.filter(is_staff=True) return super(ArticleAdmin, self).formfield_for_dbfield(db_field, **kwargs)
修改后我们再次添加文章时,选择作者时就只会出现管理员用户了
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.ltfred.com/article/python-admin-field/