Eerlijk gezegd, als die dingen blokkers voor je zijn, gebruik Django dan niet. Ik ben een zeer groot voorstander van Django, maar als je denkt dat het niet aan je behoeften voldoet, moet je iets anders kiezen.
Ik moet wel zeggen dat dat rare dingen zijn om je op te fixeren. Ik kan me niet voorstellen waarom een extra veld voor primaire sleutels op een tussenliggende M2M-tabel überhaupt een probleem zou zijn. (Houd er echter rekening mee dat samengestelde velden - inclusief PK's - dit jaar het onderwerp zijn geweest van een Summer of Code-project en klaar zijn om samen te voegen - zie https://groups.google.com/forum/#!topic/django-developers/CD7OrkJ63zc )
En nogmaals, waarom het ontbreken van standaardinstellingen op SQL-niveau "het leven moeilijker maakt" is moeilijk te begrijpen:als je alles via Django's ORM doet, maakt het geen verschil waar de standaardinstelling wordt toegepast; plus, zoals Adrian op dat ticket zei, zou het doen in SQL de huidige functionaliteit verminderen door zaken als callable defaults onmogelijk te maken.
Je moet ook nadenken over waarom je deze relatief triviale details de grote voordelen laat overschaduwen die Django je biedt:expressieve ORM, sjabloontaal, bloeiende gemeenschap, enorme aantallen apps van derden ... Maar zelfs dat gezegd hebbende, nogmaals je bent vrij om iets anders te kiezen als het echt niet voor je werkt.