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

Django表单下拉框仅显示登录用户所属分部的选项

解决方案

要实现创建Profile时仅显示登录用户所属的分部,可按以下步骤修改代码:

1. 调整表单类,动态过滤分部选项

在forms.py中给ProfileForm添加初始化方法,接收当前用户并筛选division字段的可选范围:

class ProfileForm(ModelForm):
    class Meta:
        model = models.Profile
        fields = ('division', 'name')
        
        widgets = {
            'division': forms.Select(attrs={'class':'form-control'}),
            'name': forms.TextInput(attrs={'class':'form-control'})
        }

    def __init__(self, *args, **kwargs):
        # 从参数中取出用户对象,默认值为None
        self.user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        # 若用户已登录,只显示该用户关联的分部
        if self.user and self.user.is_authenticated:
            self.fields['division'].queryset = self.user.division_set.all()

2. 修改视图,实例化表单时传入当前用户

在views.py的AddProfile视图中,实例化表单时带上request.user参数:

def AddProfile(request):
    submitted = False
    if request.method == "POST":
        form = forms.ProfileForm(request.POST, user=request.user)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('profile?submitted=true')
    else:
        form = forms.ProfileForm(user=request.user)
        if 'submitted' in request.GET:
            submitted = True
    return render(request,'profiles/create/create_profile.html', {'form': form, 'submitted': submitted})

额外优化(可选)

如果需要限制只有登录用户才能访问该创建页面,可给视图添加登录验证装饰器:

from django.contrib.auth.decorators import login_required

@login_required
def AddProfile(request):
    # 原视图代码

内容的提问来源于stack exchange,提问作者chrisg06

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:54:18