Opened 15 years ago

Last modified 7 years ago

#12265 closed

Media (js/css) collection strategy in Forms has no order dependence concept — at Version 1

Reported by: tblanchard@… Owned by: nobody
Component: Forms Version: 1.1
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Alex Gaynor)

And thus is broken. I have a form with a bunch of fields in it and when collecting the js files to include it mixes up the order and thus core.js ends up loaded later than files that require addEvent and the js load fails. At the end of the day, this mechanism is just half baked and would be better removed entirely so busy developers can just get stuff done and not waste time with it.

For example:

class NewIncidentForm(forms.ModelForm):
    place = forms.CharField(widget=EditableMap(options={
        'layers': ['google.hybrid', 'google.streets', 'google.physical', 'google.satellite',  ],
        'default_lat': 39.4421,
        'default_lon': -100.0,
        'default_zoom': 7,
        'geometry': 'point',
        }))
    when_occurred = forms.DateTimeField(widget=widgets.AdminSplitDateTime())
    when_reported = forms.DateTimeField(widget=widgets.AdminSplitDateTime())
     
    class Meta:
        model = Incident
        
    class Media:
        js = (  '/media/js/core.js',
                '/media/js/admin/RelatedObjectLookups.js',
                '/media/js/getElementsBySelector.js',
                '/media/js/actions.js', )

class Incident(models.Model):

    title = models.CharField(max_length=128)
    when_occurred = models.DateTimeField()
    when_reported = models.DateTimeField()
    reporter = models.ForeignKey(User)
    place = models.PointField()
    notes = models.TextField(max_length=4000)
    what_type = models.ForeignKey(IncidentType)
    
    # allow spatial querying
    objects = models.GeoManager()

results in this:

       <link href="/static/olwidget/css/olwidget.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="/media/js/calendar.js"></script>
<script type="text/javascript" src="/media/js/admin/DateTimeShortcuts.js"></script>
<script type="text/javascript" src="http://openlayers.org/api/2.8/OpenLayers.js"></script>
<script type="text/javascript" src="/static/olwidget/js/olwidget.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAWGazslnMSgtzbIMfXLHIgBS5ci6sQZUkD9hfwKAiXgiJK2N7uxTWbLDcob2apHjRnK6OlA7hReqQaA"></script>
<script type="text/javascript" src="/media/js/core.js"></script>
<script type="text/javascript" src="/media/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="/media/js/getElementsBySelector.js"></script>
<script type="text/javascript" src="/media/js/actions.js"></script>

which fails because DateTimeShortcuts requires addEvent which is defined in core.js

Change History (1)

comment:1 by Alex Gaynor, 15 years ago

Description: modified (diff)

Please use preview.

Note: See TracTickets for help on using tickets.
Back to Top