1

양식 및 Formset (Visit 및 VisitService)에 싱싱 양식을 설정하려고합니다.Helper를 django에 전달할 수 없습니다. 템플릿의 Crispy Formset

내가 어떻게하는지에 관계없이 formset에 도우미를 연결하는 데 문제가 있습니다. 본인은 해당 formset에 속성으로 도우미를 추가하고 확인하고 상황에 도우미를 추가하지만 나에게 다음과 같은 오류주고 유지 :

VariableDoesNotExist - 키 [도우미]의 실패 조회 은 (또한 [helper_attribute] 시도)

를 여기

내가 사용하고 무엇을 :

forms.py :

class VisitForm(forms.ModelForm): 
    class Meta: 
     model = models.Visit 
     fields = [ 
      [...all visit fields go here...] 
     ] 
    def __init__(self, *args, **kwargs): 
     super(VisitForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper(self) 
     self.helper.layout = Layout(
[...fields go here...] 

      ), 
      ButtonHolder(
       Submit('submit', 'Submit', css_class='button white btn-wide') 
      ) 
     ) 
class VisitServiceForm(forms.ModelForm): 
    class Meta: 
     model = models.VisitService 
     fields = [ 
      'service', 
      'unit', 
     ] 

    def __init__(self, *args, **kwargs): 
     super(VisitServiceForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper() 
     self.helper.layout = Layout(
      Row(
       Div(Field('service'),css_class='col-sm-4'), 
       Div(Field('unit'),css_class='col-sm-4'), 
     ) 
VisitServiceFormSet = forms.modelformset_factory(
    models.VisitService, 
    form=VisitServiceForm, 
    extra=2, 
) 
VisitServiceInlineFormSet = forms.inlineformset_factory(
    models.Visit, 
    models.VisitService, 
    extra=5, 
    fields=('service', 'unit'), 
    formset=VisitServiceFormSet, 
    min_num=1, 
) 

views.py :

def create_visit(request, patient_pk): 
    patient = get_object_or_404(models.Patient, pk=patient_pk) 
    form_class = forms.VisitForm 
    form = form_class() 
    visitservice_forms = forms.VisitServiceInlineFormSet(
     queryset=models.VisitService.objects.none() 
    ) 
    helper = forms.VisitServiceForm() 

    if request.method == 'POST': 
     form = form_class(request.POST) 
     visitservice_forms = forms.VisitServiceInlineFormSet(
      request.POST, 
      queryset=models.VisitService.objects.none() 
     ) 
     if form.is_valid() and visitservice_forms.is_valid(): 
      visit = form.save(commit=False) 
      visit.patient = patient 
      visit.save() 
      visitservices = visitservice_forms.save(commit=False) 
      for visitservice in visitservices: 
       visitservice.visit = visit 
       visitservice.save() 
      messages.success(request, "Added visit") 
      return HttpResponseRedirect(visit.get_absolute_url()) 

    return render(request, 'fpform/visit_form.html', { 
      'patient': patient, 
      'form': form, 
      'formset': visitservice_forms, 
      'helper': helper, 
    }) 

템플릿 :

나는 또한 별도 행운과 이들 각각 하나를 사용했습니다 내 템플릿에
<div class="container"> 
    <form method="POST" action=""> 
     {% crispy form %} 
     {% crispy formset formset.form.helper_attribute %} 
     </div> 
    </form> 

: 나는 파삭 파삭 한 문서 보았다

{% crispy formset formset.form.helper %} 
{% crispy formset helper_attribute %} 
{% crispy formset helper %} 
{% crispy formset form.helper_attribute %} 
{% crispy formset form.helper %} 

하지만 답을 찾을 수 없습니다 그곳에.

하루 종일 소요되지만 어디에도 가지 않았습니다. 또한이를 달성 할 수있는 더 좋은 방법이 있다면 알려 주시기 바랍니다.

답변

0

양식 세트의 레이아웃을 정의하려면 독립적 인 FormHelper 클래스를 만들어 양식에 전달해야합니다.

http://django-crispy-forms.readthedocs.io/en/latest/crispy_tag_formsets.html

# forms.py 
class VisitServiceFormHelper(FormHelper): 
    def __init__(self, *args, **kwargs): 
     super(VisitServiceFormHelper, self).__init__(*args, **kwargs) 
     self.layout = Layout(
      Div(Field('service'),css_class='col-sm-4'), 
      Div(Field('unit'),css_class='col-sm-4'), 
     ) 

#views.py 
formset = VisitServiceInlineFormSet(queryset=VisitService.objects.none()) 
helper = VisitServiceFormHelper() 
return render(request, 'template.html', {'formset': formset, 'helper': helper}) 

#template 
{% crispy formset helper %} 
관련 문제