433 self.form_build_context(values) |
433 self.form_build_context(values) |
434 return renderer.render(self) |
434 return renderer.render(self) |
435 |
435 |
436 def form_build_context(self, values): |
436 def form_build_context(self, values): |
437 self.context = context = {} |
437 self.context = context = {} |
|
438 # on validation error, we get a dictionnary of previously submitted values |
|
439 previous_values = self.req.data.get('formvalues') |
|
440 if previous_values: |
|
441 values.update(previous_values) |
438 for field in self.fields: |
442 for field in self.fields: |
439 context[field] = {'value': self.form_field_value(field, values), |
443 context[field] = {'value': self.form_field_value(field, field_values), |
440 'name': self.form_field_name(field, values), |
444 'name': self.form_field_name(field), |
441 'id': self.form_field_id(field, values), |
445 'id': self.form_field_id(field), |
442 } |
446 } |
443 |
447 |
444 def form_field_value(self, field, values): |
448 def form_field_value(self, field, values): |
445 """looks for field's value in |
449 """looks for field's value in |
446 1. kw args given to render_form |
450 1. kw args given to render_form (including previously submitted form |
|
451 values if any) |
447 2. req.form |
452 2. req.form |
448 3. field's initial value |
453 3. field's initial value |
449 """ |
454 """ |
450 if field.name in values: |
455 if field.name in values: |
451 value = values[field.name] |
456 value = values[field.name] |
453 value = self.req.form[field.name] |
458 value = self.req.form[field.name] |
454 else: |
459 else: |
455 value = field.initial |
460 value = field.initial |
456 return field.format_value(self.req, value) |
461 return field.format_value(self.req, value) |
457 |
462 |
458 def form_field_name(self, field, values): |
463 def form_field_name(self, field): |
459 return field.name |
464 return field.name |
460 |
465 |
461 def form_field_id(self, field, values): |
466 def form_field_id(self, field): |
462 return field.id |
467 return field.id |
463 |
468 |
464 def form_field_vocabulary(self, field): |
469 def form_field_vocabulary(self, field): |
465 raise NotImplementedError |
470 raise NotImplementedError |
466 |
471 |
497 self.fields.append(TextField(name='eid', widget=HiddenInput)) |
502 self.fields.append(TextField(name='eid', widget=HiddenInput)) |
498 |
503 |
499 def form_render(self, entity, **values): |
504 def form_render(self, entity, **values): |
500 self.entity = entity |
505 self.entity = entity |
501 return super(EntityFieldsForm, self).form_render(**values) |
506 return super(EntityFieldsForm, self).form_render(**values) |
502 |
507 |
503 def form_field_value(self, field, values): |
508 def form_field_value(self, field, values): |
504 """look for field's value with the following rules: |
509 """look for field's value with the following rules: |
505 1. handle special __type and eid fields |
510 1. handle special __type and eid fields |
506 2. looks in kw args given to render_form |
511 2. looks in kw args given to render_form (including previously submitted |
|
512 form values if any) |
507 3. looks in req.form |
513 3. looks in req.form |
508 4. if entity has an eid: |
514 4. if entity has an eid: |
509 1. looks for an associated attribute / method |
515 1. looks for an associated attribute / method |
510 2. use field's initial value |
516 2. use field's initial value |
511 else: |
517 else: |
543 value = field.initial |
549 value = field.initial |
544 if callable(value): |
550 if callable(value): |
545 values = value() |
551 values = value() |
546 return field.format_value(self.req, value) |
552 return field.format_value(self.req, value) |
547 |
553 |
548 def form_field_name(self, field, values): |
554 def form_field_name(self, field): |
549 if field.eidparam: |
555 if field.eidparam: |
550 return eid_param(field.name, self.entity.eid) |
556 return eid_param(field.name, self.entity.eid) |
551 return field.name |
557 return field.name |
552 |
558 |
553 def form_field_id(self, field, values): |
559 def form_field_id(self, field): |
554 if field.eidparam: |
560 if field.eidparam: |
555 return eid_param(field.id, self.entity.eid) |
561 return eid_param(field.id, self.entity.eid) |
556 return field.id |
562 return field.id |
557 |
563 |
558 def form_field_vocabulary(self, field): |
564 def form_field_vocabulary(self, field): |