You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:05:23