'User' 对象没有带有表单集的属性 'get'(通过用户获取查询集)
'User' object has no attribute 'get' with formset (passing user to get a queryset)
我正在尝试显示特定用户的表单集。
如果用户在 'medical tab',那么它应该为用户的每个依赖项显示一个小表单(一个复选框和一个文本框)。
在我的 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 函数,那么它会按预期显示单个复选框和文本框 - 但我不明白为什么以这种方式传递用户是行不通的。
奖励积分:如果您知道如何使用相应的数据预填充表单集 - 这是我克服 'User' 错误后的下一步。
您将用户作为位置参数传递给表单集的实例化,但表单集期望那里有 POST 数据。您想要的是将该值作为关键字参数传递给 forms。
幸运的是,由于 Django 1.9 表单集通过 form_kwargs
argument 支持这一点。所以你应该这样做:
link_formset = DepMedFormSet(form_kwargs={'user': user})
您没有在处理该表单集的地方显示代码,但请记住也要在那里传递 form_kwarg。
我正在尝试显示特定用户的表单集。
如果用户在 'medical tab',那么它应该为用户的每个依赖项显示一个小表单(一个复选框和一个文本框)。
在我的 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 函数,那么它会按预期显示单个复选框和文本框 - 但我不明白为什么以这种方式传递用户是行不通的。
奖励积分:如果您知道如何使用相应的数据预填充表单集 - 这是我克服 'User' 错误后的下一步。
您将用户作为位置参数传递给表单集的实例化,但表单集期望那里有 POST 数据。您想要的是将该值作为关键字参数传递给 forms。
幸运的是,由于 Django 1.9 表单集通过 form_kwargs
argument 支持这一点。所以你应该这样做:
link_formset = DepMedFormSet(form_kwargs={'user': user})
您没有在处理该表单集的地方显示代码,但请记住也要在那里传递 form_kwarg。