python - 将 request.user 参数传递给 modelformset_factory 表单

标签 python django

所以我有一个与模型绑定(bind)的表单集,其中的字段之一是 ForeignKey

models.py

class Squad(models.Model):
    rid = models.AutoField(primary_key=True)        
    team = models.ForeignKey(Team, on_delete=models.CASCADE)    

    def __str__(self):
        return self.team.tname

forms.py

class SquadForm(ModelForm):     
    class Meta:
        model = Squad    

    def __init__(self, logged_user, user, *args, **kwargs):
        super(SquadForm, self).__init__(*args, **kwargs)
        self.fields['team'] = forms.ModelChoiceField(queryset=Team.rows.get_my_teams(user=logged_user), empty_label="None")

如您所见,__init__ 函数需要一个额外的参数logged_user,我希望通过views.py 文件传递​​该参数。但如果我执行以下操作:

views.py

def choose_teams(request):      
    teamformset = modelformset_factory(Squad, extra=2, form=SquadForm(request.user))

    form = teamformset(queryset=Squad.objects.none())
    return render(request, 'foo.html', {'form':form})

我尝试将登录用户作为第 2 行的参数传递,但这会导致以下消息:

Field 'id' expected a number but got 'SquadForm'

不确定我在这里缺少什么。但如果我从第 2 行删除参数:

teamformset = modelformset_factory(Squad, extra=series.team_number, form=SquadForm)

它开始工作(当然,我不再期望 forms.py 文件中的用户并将其也删除),但显示所有数据而不是过滤数据。

最佳答案

您可以通过传递 form_kwargs={} 将其他关键字参数传递到表单集表单。到您的表单集

class SquadForm(ModelForm):     
    class Meta:
        model = Squad    

    def __init__(self, *args, logged_user, **kwargs):
        super(SquadForm, self).__init__(*args, **kwargs)
        self.fields['team'] = forms.ModelChoiceField(queryset=Team.rows.get_my_teams(user=logged_user), empty_label="None")


teamformset = modelformset_factory(Squad, extra=2, form=SquadForm)
form = teamformset(queryset=Squad.objects.none(), form_kwargs={'logged_user': request.user})

关于python - 将 request.user 参数传递给 modelformset_factory 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69953993/

相关文章:

python - 简单函数是线程安全的吗

javascript - JSON python 到 javascript

python - 如何从 Django request.data 获取上传图像文件的扩展名

python - 如何允许来自 Axios 的 CORS 在 Django 后端获取请求?

python - Django和多线程程序中的 "get() returned more than one Model name"错误

python - 有效地确定 "how sorted"列表是,例如。编辑距离

Python打包: Data files are put properly in tar. gz文件但没有安装到虚拟环境

django - 是否有可能达到 'measure' 的 django 模型实例的嵌套级别

python - 在 Django 中的 Linode Ubuntu 21.10 上运行的 Apache 2 出现 403 错误

django - Errno 13 权限被拒绝 Django 上传文件