Django表单中按登录用户所属组筛选Marketplace下拉选项问题
问题解决:根据登录用户组筛选Django表单下拉选项
错误分析
你代码里有两个关键问题导致筛选失效:
- 变量引用错误:
__init__方法里用了self.user,但你只把user作为参数传入,并没有将其赋值给表单实例的属性,应该直接使用传入的user参数。 - 筛选逻辑错误:
Marketplace的groups是关联到Group的外键,而用户和组是多对多关系,原条件groups__user=self.user无法正确匹配用户所属组对应的Marketplace,需要用groups__in来匹配用户的所有组。
修正后的表单代码
class InfringementForm(ModelForm): def __init__(self, user, *args, **kwargs): super().__init__(*args, **kwargs) # 筛选当前用户所属组对应的Marketplace选项 self.fields['marketplace'].queryset = Marketplace.objects.filter(groups__in=user.groups.all()) class Meta: model = Infringement fields = ['name', 'link', 'infringer', 'player', 'remove', 'status', 'screenshot','marketplace']
视图层注意事项
在视图中实例化表单时,必须传入当前登录用户:
def infringement_create(request): if request.method == 'POST': form = InfringementForm(request.user, request.POST, request.FILES) if form.is_valid(): form.save() # 后续跳转或业务逻辑 else: form = InfringementForm(request.user) return render(request, 'your_template.html', {'form': form})
内容的提问来源于stack exchange,提问作者Farid
相关产品推荐
相关产品推荐

