[英]Pass request.user to modelformset_factory() in Django
[英]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.