De grens tussen prutsen en niet-prutsen

Zodus, ik moest wat dingen aanpassen aan een Django-ding dat ik gemaakt had voor Refu-Interim.

Ik dacht eerst dat ik het wel op een dag of twee zou kunnen doen, maar dan kwam ik plots iets tegen dat eigenlijk niet in standaard-Django ingebouwd zit, en ging ik er eens op zoeken, en toen was er werk, en dan waren er uitstappen, en aangezien ik er alleen maar aan kan werken buiten de werkuren en er dingen te doen waren, deed het time management niet wat er van time management verwacht werd, en hop, ‘t was plots twee weken later in plaats van twee dagen.

Maar niet getreurd! Vandaag is een vakantiedag dus kan ik werken!

Het probleem is dat er een admin-pagina is waar er een reeks dingen in een fieldset staan (een lijst van velden in categorieën), en een andere reeks dingen in een reeks inlines (een soort sub-formulier), en dat Django er op staat om altijd alle inlines na de fieldset te zetten.

Dus er staat iets als dit:

djangovoor

En dat geeft dan een formulier met in het begin allerlei veldjes zoals dit:

velden

En daarna een reeks inlines die van zeer eenvoudig zoals dit:

skills

Naar meer ingewikkeld gaan zoals bijvoorbeeld Adres (met het adres gestructureerd, van/tot, al dan niet nog geldig, type, …) of Talenkennis.

De logische vraag was om de zaken wat meer te structureren zoals ze tijdens een typisch intake-gesprek afgehandeld worden:

  1. persoonlijke informatie (fields)
  2. contactinfo (inline)
  3. adressen (inline)
  4. professioneel (fields)
  5. vaardigheden (inline)
  6. talenkennis (inline)
  7. werkpoule (fields)
  8. opmerkingen (inline)

Even in het haar scharten later: gekozen voor een oplossing waarvan ik niet zeker ben of ik ze vies of niet-vies vind.

Gegeven dat jquery toch standaard meegeladen wordt in die Django admin, heb ik besloten om de nodige stukken pagina gewoon met jquery te verslepen.

Aan het formulier zelf voeg ik twee read-only lege velden toe (eentje net na “persoonlijke informatie” en eentje net voor “werkpoule”):

djangona

En dan zeg ik dat er nog een bijkomend stuk javascript moet ingeladen worden:

djangomove

En in die move_inlines.js steek ik de hardgecodeerde vieze (denk ik) instructies om de inlines te verhuizen en dan de lege placeholders weg te smijten:

hackety

Niet zeer elegant, da’s het minste wat er van kan gezegd worden, maar hey: dat doet dus wat het moet doen, zonder klagen, en zonder drama. 🙂