如何在Django文章上传表单中筛选is_staff用户并显示用户名?
解决方案
要实现仅展示is_staff角色用户作为作者选项,同时显示用户名而非邮箱,只需修改forms.py中的表单定义即可:
修改后的forms.py代码
from django import forms from django.contrib.auth.models import User from .models import Article from taggit.forms import TagField, LabelWidget class ArticleForm(forms.ModelForm): tags = TagField(required=False, widget=LabelWidget) # 重写author字段,实现筛选和自定义显示 author = forms.ModelChoiceField( queryset=User.objects.filter(is_staff=True), label='作者', # 自定义选项显示内容为用户名 label_from_instance=lambda user: user.username ) class Meta: model = Article fields = ('article_name', 'author', 'content', 'tags', 'status')
关键修改说明
- 筛选staff用户:通过
queryset=User.objects.filter(is_staff=True),限制作者选项仅包含拥有staff权限的用户。 - 显示用户名:使用
label_from_instance参数,传入lambda函数返回用户的username属性,替代默认的邮箱显示(Django默认User模型的__str__方法返回邮箱)。
额外建议
如果需要确保只有staff用户才能访问文章创建页面,可以在视图中添加StaffRequiredMixin(需导入django.contrib.auth.mixins.StaffRequiredMixin),修改views.py中的视图类:
class ArticleCreateView(LoginRequiredMixin, StaffRequiredMixin, CreateView): # 原有代码保持不变 ...
内容的提问来源于stack exchange,提问作者Kiran Sarda
相关产品推荐
相关产品推荐

