I'm trying to replace the standard AdminSplitDateTime widget in my admin 
site for better functionality (basically I want to display only 'available' 
dates in my calender which I couldn't find how to do with the default 
picker). I decided to use the bootstrap3_datetime widget.

After overriding my field to use the new widget, it doesn't seem to be 
transferred into the 'clean' method (isn't in self.cleaned_data) for 
validation.

*models.py*

publish_time = models.DateTimeField('Date to publish')

*admin.py*

class MyForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        bad_dates = []
        #populating bad_dates with application logic

    def clean(self):

        # This will always return None when using the new widget.
        # When working with the default widget, I have the correct value.
        publish_time = self.cleaned_data.get('publish_time', None)


    publish_time = forms.DateTimeField(widget=DateTimePicker(options=
            {"format": "DD-MM-YYYY HH:mm",
             "startDate": timezone.now().strftime('%Y-%m-%d'),
             "disabledDates": bad_dates,
             })

class MyModelAdmin(admin.ModelAdmin):
    form = MyForm

admin.site.register(MyModel, MyModelAdmin)

HTML-wise, the widget works well and the text field is populated with the 
correct date (and with the 'bad_dates' disabled). The problem is that it 
seems it isn't saved on the form.

I also tried initializing the widget in the init method by doing:

self.fields['publish_time'].widget = DateTimePicker(options=...)

But the result was the same.

I've analysed the POST request that is sent using each of the widgets. In 
the default admin widget, I see that it generates two fields: 
"publish_time_0" (for date) and "publish_time_1" (for time). In the 
bootstrap3 widget, only a single "publish_time" field is sent.

I'm assuming that the admin site understands that the field is a 
DateTimeField (from models), looks for id_0 and id_1 and that's why it 
fails. Does that make sense? Is there anyway around it?

Thanks a lot!
Ilia

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/21215bea-1acb-4f95-b77e-9c00601be69c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to