我正在尝试为特定用户显示一个formset。
如果用户位于“医疗标签”上,则应为每位用户显示一个小格式(复选框和文本框)。
在我的views.py
我有这个:
def get_dep_form(benefit_tab, user):
if benefit_tab == 'medical':
DepMedFormSet = formset_factory(DependentMedicalBenefitForm)
link_formset = DepMedFormSet(user)
else:
return None
return link_formset
在我的forms.py
我有这个:
class DependentMedicalBenefitForm(forms.ModelForm):
has_medical = forms.BooleanField()
med_group_id = forms.CharField(max_length=10)
class Meta:
model = Dependent
fields = [
'has_medical', 'med_group_id'
]
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
queryset = Dependent.objects.filter(employee=self.user)
super(DependentMedicalBenefitForm, self).__init__(*args, **kwargs)
self.fields['has_medical'].queryset = queryset
self.fields['med_group_id'].queryset = queryset
在我的views.py
中,我收到了这样的表格:
def index(request, benefit_tab=None):
#stuff
if benefit_tab:
link_formset = get_dep_form(benefit_tab, request.user)
return render(request, 'benefits/index.html', {
#stuff
'link_formset': link_formset,
})
我遇到了错误:'User' object has no attribute 'get'
如果我没有通过用户,并注释掉 init 功能,那么它会按预期显示一个复选框和文本框 - 但我无法弄清楚为什么以这种方式传递用户没有用。
奖励积分:如果您知道如何使用相应的数据预填充表单集 - 一旦我超过“用户”错误,这就是下一步。
答案 0 :(得分:0)
您将用户作为位置参数传递给formset的实例化,但是formset期望POST数据存在。您想要的是将该值作为关键字arg。
传递给表单幸运的是,由于Django 1.9 formsets通过form_kwargs
argument支持这一点。所以你应该这样做:
link_formset = DepMedFormSet(form_kwargs={'user': user})
您不会显示处理该formset的代码,但请记住也将那个form_kwarg传递给它。