Ticket #10427: django-forms-value.5.diff

File django-forms-value.5.diff, 3.0 KB (added by Ludvig Ericson, 16 years ago)

Added documentation

  • django/forms/forms.py

     
    366366        auto_id = self.auto_id
    367367        if auto_id and 'id' not in attrs and 'id' not in widget.attrs:
    368368            attrs['id'] = auto_id
    369         if not self.form.is_bound:
    370             data = self.form.initial.get(self.name, self.field.initial)
    371             if callable(data):
    372                 data = data()
    373         else:
    374             data = self.data
    375369        if not only_initial:
    376370            name = self.html_name
    377371        else:
    378372            name = self.html_initial_name
    379         return widget.render(name, data, attrs=attrs)
     373        return widget.render(name, self.value, attrs=attrs)
    380374
    381375    def as_text(self, attrs=None, **kwargs):
    382376        """
     
    401395        return self.field.widget.value_from_datadict(self.form.data, self.form.files, self.html_name)
    402396    data = property(_data)
    403397
     398    def _value(self):
     399        """
     400        Returns the value for this BoundField, as rendered in widgets.
     401        """
     402        if not self.form.is_bound:
     403            val = self.form.initial.get(self.name, self.field.initial)
     404            if callable(val):
     405                val = val()
     406        else:
     407            val = self.data
     408        if val is None:
     409            val = ''
     410        return val
     411    value = property(_value)
     412
    404413    def label_tag(self, contents=None, attrs=None):
    405414        """
    406415        Wraps the given contents in a <label>, if the field has an ID attribute.
  • tests/regressiontests/forms/forms.py

     
    11961196<li>Username: <input type="text" name="username" value="stephane" maxlength="10" /></li>
    11971197<li>Password: <input type="password" name="password" /></li>
    11981198
     1199# Bound field values ##########################################################
     1200
     1201It's possible to get to the value which would be used for rendering the widget
     1202for a field by using the BoundField's value attribute.
     1203
     1204>>> class UserRegistration(Form):
     1205...    username = CharField(max_length=10, initial='djangonaut')
     1206...    password = CharField(widget=PasswordInput)
     1207>>> p = UserRegistration({'password': 'foo'})
     1208>>> print 'username.value =', p['username'].value
     1209username.value =
     1210>>> print 'username.data = ', p['username'].data
     1211username.data = None
     1212>>> print 'password.value =', p['password'].value
     1213password.value = foo
     1214>>> print 'password.data =', p['password'].data
     1215password.data = foo
     1216
     1217The value of username is empty because the form is bound -- the value wasn't
     1218specified, and so is empty. This differs if the form were to be unbound:
     1219
     1220>>> p = UserRegistration()
     1221>>> print p['username'].value
     1222djangonaut
     1223
    11991224# Help text ###################################################################
    12001225
    12011226You can specify descriptive text for a field by using the 'help_text' argument
Back to Top