繁体   English   中英

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

[英]Pass request.user parameter to modelformset_factory form

所以我有一个与模型相关的表单集,其中一个字段是ForeignKey

模型.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

表格.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 文件传递​​该参数。 但是,如果我执行以下操作:

视图.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 行,但这会导致以下消息:

字段“id”需要一个数字但得到“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})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM