As I push more of the site into operation with real data it is apparent that certain design choices may not have been as great as I would have liked them to be. The advantage of using Django is, so long as I do not do anything weird with primary keys (I already did something weird with the primary key on one of my models and had to rebuild the whole database), I can use migrations to change the structure of the models.
Early on, one of the biggest compromises I made was to make the data fit the very loose data structures I was getting from Zotero. It is both strangely over specified, there are only certain item types you can have, and underspecified, there is no restrictions to the data going in a field, date can be “Spring”. Python is great at converting date data if it knows what it is getting so I manually (and still do for new references and sources coming in) converted the date data on all my Zotero items to ISO 8601.