2017-09-18 1 views
0

특정 사용자에 대해 formset을 표시하려고합니다.'User'객체에는 formset에 'get'속성이 없습니다 (사용자를 쿼리 세트로 가져 오기)

사용자가 '의료 탭'에있는 경우 사용자의 각 부양 가족을위한 작은 양식 (확인란 및 텍스트 상자)이 표시되어야합니다. 내 views.py에서

나는이 있습니다

forms.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 

내가 가진이 :

views.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 

:

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 함수를 주석 처리하면 하나의 확인란과 텍스트 상자가 예상대로 표시되지만 사용자를이 방법으로 전달하면 작동하지 않는 이유를 알 수 없습니다.

보너스 포인트 : formset에 각각의 데이터를 미리 채우는 방법을 알고 있다면 - 다음 번에 'User'오류를 지나면됩니다.

+0

색인을 잘못 복사 했습니까? 리턴 라인에는 들여 쓰기가 없습니다. 또한 오류를 제기하는 행을 좁히기 위해 수행 한 작업은 무엇입니까? – Acccumulation

답변

0

formset의 인스턴스화에 대한 위치 인수로 사용자를 전달하지만 formset에서 POST 데이터를 기다리고 있습니다. 원하는 것은 키워드 값으로 양식에 해당 값을 전달하는 것입니다.

다행히도 Django 1.9 형식 세트는 form_kwargs argument을 통해이를 지원합니다. 따라서 다음을 수행해야합니다.

link_formset = DepMedFormSet(form_kwargs={'user': user}) 

해당 formset을 처리하는 코드는 표시하지 않지만 그 form_kwarg도 전달해야합니다.

관련 문제