2
一個formset我見過this職位和(因爲它是過時的部分),它不工作。我也研究了源碼樹無濟於事(測試幫助),但我找不到我的答案。我正在做的是在form0('start')中獲取一組種子數據,這將動態地爲step2構建一個formset。步驟2只是一個驗證步驟。Django的FormWizard - 你如何動態地創建基於前面的步驟
- '開始' - 用戶輸入細分(SUBA)郵政編碼(12345)和手(51,52,53)
- '步驟2' 一個csv - 甲動態形式(modelformset)與3中創建代表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_form_instance
方法和餵養它get_cleaned_data_for_step
,但似乎重新驗證並做很多更多的東西比我想這需要(並沒有工作)。
所以..我要找的是兩件事情。
- 什麼是正確的方式來獲得以前的表格數據。
- 如何獲取該數據並使用它創建n個表單集。
FWIW我使用Django 1.4-α表單集嚮導。
這是我的。
# 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],
})