나는 this 게시물을 보았으며 작동하지 않습니다 (부분적으로 날짜가 있기 때문에). 나는 또한 소스 트리를 무용지물로 시험했는데 (테스트가 도움이되었지만) 내 대답을 찾을 수 없다. 내가 뭘 찾고있는 동적으로 step2에 대한 formset을 빌드 form0 ('시작')에서 데이터의 씨앗 집합을 얻을 수 있습니다. 2 단계는 단순히 검증 단계입니다.Django FormWizard - 이전 단계를 기반으로 formset을 동적으로 생성하는 방법
- '시작'- (modelformset)가 3 생성되는 동적 형태 - 사용자가 호 (SUBA), 우편 번호 (12345)와 로트 (51,52,53)
- '단계 2'의 CSV 입사 51,52,53
- 사용자 안타를 나타내는 형태 가서 모델을 구축
즉
data = [ { 'subdivision': <subA>, 'zipcode': '12345', 'lot_number': '51'}
{ 'subdivision': <subA>, 'zipcode': '12345', 'lot_number': '52'}
{ 'subdivision': <subA>, 'zipcode': '12345', 'lot_number': '53'} ]
내가 시도했습니다.
here 솔루션을 구현할 때 나는 data=None
만 받았습니다. 이것은 날짜와 내가 이것을 "올바른"방법을 생각하는 소스를 통해보고 그냥 메서드를 재정의하고 그것을 get_cleaned_data_for_step
먹이를 재현하고 할 것 같습니다 많이 내가 생각하는 것보다 더 많은 것들이 (그리고 그것은 작동하지 않았다).
그래서 .. 내가 찾고있는 것은 두 가지입니다.
- 이전 양식 데이터를 얻는 올바른 방법은 무엇입니까?
- 데이터를 가져 와서 n 개의 양식 세트를 만드는 데 어떻게 사용합니까?
FWIW Django 1.4-alpha formset 마법사를 사용하고 있습니다.
다음은 내가 가지고있는 것입니다. 여기
# urls.py
url(r'homes/bulk/$', TestWizard.as_view([('start', BulkHomeForm0),
('step2', HomeFormSet)])),
# Models.py
class Subdivision(models.Model):
name = models.CharField(max_length=64)
class Home(models.Model):
lot_number = models.CharField(max_length=16)
subdivision = models.ForeignKey(Subdivision)
zipcode = models.IntegerField(validators=[validate_zipcode], null=True)
# Forms
class BulkHomeForm0(forms.Form):
subdivision = forms.ModelChoiceField(queryset=Subdivision.objects.all(), required=True)
zipcode = USZipCodeField(required=True)
lots = forms.CharField(max_length=5000, widget=forms.Textarea()
def clean(self):
subdivision = self.cleaned_data.get('subdivision', False)
zipcode = self.cleaned_data.get('zipcode', False)
final_data = []
for item in self.cleaned_data.get('lots', "").split(",")
final_data.append({'subdivision':subdivision,
'zipcode':zipcode,
'lot_number':item})
self.cleaned_data['homes'] = final_data
class BulkHomeForm1(forms.ModelForm):
class Meta:
model = Home
HomeFormSet = modelformset_factory(Home, form=BulkHomeForm1, extra=2)
# Views.py
class TestWizard(WizardView):
storage_name = 'django.contrib.formtools.wizard.storage.session.SessionStorage'
def get_form(self, step=None, data=None, files=None):
form = super(TestWizard, self).get_form(step=step, data=data, files=files)
return form
def done(self, form_list, **kwargs):
return render_to_response('done.html', {
'form_data': [form.cleaned_data for form in form_list],
})