2015-01-31 2 views
1

JSON을 사용하여 장고에서 여러 모델을 가져 오기위한 마법사를 만들려고합니다. JSON을 사용하는 장고 가져 오기 마법사

  1. 다음 날을 가져올 것이다
  2. 은 2 단계로 제출 좀 JSON 항목에 붙여 타격 할 수있는 텍스트 필드
  3. 를 표시합니다 entries/import/ 같은 URL로 이동 : 나는 할 수 있도록하려면 나는이 모델의 목록이 표시됩니다 마법사가 형성
  4. 제출해야 내가 칠 수있는 몇 가지 데이터를 변경/검사에 모든 항목이 나는을 사용하려는 것 같습니다

을 저장

  • FormSet과 함께 사용하십시오. 1 단계와 2 단계를 완료했지만 모든 모델을 마법사의 2 단계에서 양식으로 표시하는 방법을 알아낼 수 없습니다.

    this link은 어디에서 JSON을 FormSet으로 변환 할 수 있는지 보여 주지만 아직까지는 작동하지 못했습니다. 아래는 관련 코드로 믿는 것입니다. formset을 step2으로 전달하는 방법을 알아낼 수 있습니까?

    class EntryForm(forms.ModelForm): 
        class Meta: 
         model = Entry 
         fields = ['text', 'tags'] 
    
    class ImportForm(forms.Form): 
        json = forms.CharField(widget=forms.Textarea, label='JSON') 
    
    class ImportSelectionForm(forms.Form): 
        entryFormSet = formset_factory(EntryForm) 
    
    FORMS = (
        ("step1", ImportForm), 
        ("step2", ImportSelectionForm), 
    ) 
    
    TEMPLATES = { 
        "step1": "entries/json_form.html", 
        "step2": "entries/entry_import_form.html", 
    } 
    
    class ImportWizard(SessionWizardView): 
        def get_template_names(self): 
         return [TEMPLATES[self.steps.current]] 
    
        def get_form_initial(self, step): 
         current_step = self.storage.current_step 
    
         if current_step == 'step2': 
          # Not getting here for some reason after submitting step1 
          prev_data = self.storage.get_step_data('step1') 
          json = prev_data.get('step1-json', '') 
    
          models = serializers.deserialize("json", json) 
          EntryFormSet = formset_factory(EntryForm) 
          formset = EntryFormSet(self.request.POST, self.request.FILES) 
    
          return self.initial_dict.get(step, {'formset': formset}) 
    
         return self.initial_dict.get(step, {}) 
    
        def done(self, form_list, **kwargs): 
         return HttpResponseRedirect(revierse_lazy('entries:index')) 
    
  • +0

    아마도 2 단계로 가면 방금 만든 모델의 ID를 추가하고 표시하는 특정 URL로 리디렉션됩니다. 하나의 httpresponse를 작성한 다음 보내면됩니다. 또한 오타가있는 것 같습니다 : revierse_lazy –

    +0

    의도는 step2를 제출할 때까지 모델을 만들지 않으므로 step2 중에 ID가없는 것입니다. 나는 결국 사용자가 step2에서 생성 할 항목을 선택하여 선택할 수있게하고 싶지만 초기 단계는 모든 항목을 만드는 것일뿐입니다. 나는 또한 URL을 깨끗하게 유지하고 싶다. 오타를 지적 해 주셔서 감사합니다. –

    답변

    1

    당신은 get_form_initial 방법 대신 self.storage.current_step를 사용하여 전달 step 매개 변수를 사용해야합니다. 테스트 후 나는 self.storage.current_step에 이전 단계가 있음을 발견했습니다.

    get_form_initial은 이전 단계에 한 번, 현재 단계에 대해 한 번 두 번 처리됩니다.

    +0

    'get_form_initial'에서 step2 조건으로 들어가는 데 도움이되었지만 여전히 step2에서 어떤 형식도 얻지 못했습니다. –