I am using newforms-admin to add custom validation for a Calendar
app.  I am trying to handle recurring events by displaying extra
fields in the EventForm when creating a new event, but then disabling
those fields for already-existing events.  I overrode ModelForm's
__init__ to achieve this by adding a "disabled" attribute to the
widget for those fields so that they would be disabled when displayed
as HTML.
Here's the code:

class EventForm(forms.ModelForm):

... extra field definitions here ...

def __init__(self, data=None, files=None, auto_id='id_%s',
prefix=None,
                 initial=None, error_class=ErrorList,
label_suffix=':',
                 empty_permitted=False, instance=None):
        if instance is not Null:
            self.recurring.widget.attrs = {'disabled': 'disabled'}
            self.repeat_type.widget.attrs = {'disabled': 'true'}
            self.repeat_interval.widget.attrs = {'disabled': 'true'}
            self.end_on.widget.attrs = {'disabled': 'true'}
            self.weekly_day_select.widget.attrs = {'disabled': 'true'}
            self.monthly_repeat_type.widget.attrs = {'disabled':
'true'}
            self.monthly_week_select.widget.attrs = {'disabled':
'true'}
            self.monthly_day_select.widget.attrs = {'disabled':
'true'}

        super(EventForm, self).__init__(data, files, auto_id, prefix,
initial, error_class,
                                        label_suffix, empty_permitted,
instance)

So, those 'disabled' attributes should only be set if the EventForm's
instance is not Null.  That way, we don't allow the user to try to add
recurring information to an existing Event, but the fields are
available when creating a new Event.

However, it seems that if I go view one of the already-created Events,
and my code in __init__ is executed and disables those fields, then
from that point on, EventForm will leave those fields disabled, even
if I try to add a new Event (at which point the instance *is* Null, so
the fields should not get disabled).
I have inserted print statements to check the flow of execution within
__init__ and everything works as expected, but it seems like once
those disabled attributes are set, they are set for good.

Maybe I don't understand Python well enough and by setting these
values in __init__, I'm actually doing more than I think.

Thanks,
Eric
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to