Ticket #5175: formsets-required_forms-5897.diff
File formsets-required_forms-5897.diff, 2.5 KB (added by , 17 years ago) |
---|
-
django/newforms/formsets.py
21 21 """A collection of instances of the same Form class.""" 22 22 23 23 def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=None): 24 self.is_bound = data is not None andfiles is not None24 self.is_bound = data is not None or files is not None 25 25 self.prefix = prefix or 'form' 26 26 self.auto_id = auto_id 27 27 self.data = data … … 61 61 kwargs['files'] = self.files 62 62 add_form = FormClass(**kwargs) 63 63 self.add_fields(add_form, i) 64 # HACK: Form is empty, lets re-create without data so it doesn't trip validation 65 if self.data and add_form.is_empty(): 66 del(kwargs['data']) 67 add_form = FormClass(**kwargs) 68 self.add_fields(add_form, i) 64 69 add_forms.append(add_form) 65 70 self._add_forms = add_forms 66 71 return self._add_forms … … 69 74 def _get_change_forms(self): 70 75 """Return a list of all the change forms in this ``FormSet``.""" 71 76 FormClass = self.form_class 72 if not hasattr(self, '_ add_forms'):77 if not hasattr(self, '_change_forms'): 73 78 change_forms = [] 74 79 for i in range(0, self.change_form_count): 75 80 kwargs = {'auto_id': self.auto_id, 'prefix': self.add_prefix(i)} … … 93 98 def full_clean(self): 94 99 """Cleans all of self.data and populates self.__errors and self.cleaned_data.""" 95 100 is_valid = True 96 errors = []101 errors = ErrorList() 97 102 if not self.is_bound: # Stop further processing. 98 103 self.__errors = errors 99 104 return … … 134 139 if self.orderable: 135 140 cleaned_data.sort(lambda x,y: x[ORDERING_FIELD_NAME] - y[ORDERING_FIELD_NAME]) 136 141 142 if is_valid and self.required_forms > len(cleaned_data): 143 errors.insert(0, 'asdf') 144 is_valid = False 145 137 146 if is_valid: 138 147 self.cleaned_data = cleaned_data 139 148 self.deleted_data = deleted_data … … 151 160 return '%s-%s' % (self.prefix, index) 152 161 153 162 def is_valid(self): 163 if not self.is_bound: 164 return False 154 165 self.full_clean() 155 166 return self._is_valid 156 167