Honestamente, si esas cosas son bloqueadores para ti, no uses Django. Soy un gran defensor de Django, pero si crees que no satisface tus necesidades, deberías elegir otra cosa.
Sin embargo, debo decir que esas son cosas extrañas en las que fijarse. No puedo imaginar por qué un campo de clave principal adicional en una tabla M2M intermedia sería un problema. (Sin embargo, tenga en cuenta que los campos compuestos, incluidos los PK, han sido objeto de un proyecto Summer of Code este año y parecen estar listos para fusionarse; consulte https://groups.google.com/forum/#!topic/django-developers/CD7OrkJ63zc )
Y nuevamente, es difícil entender por qué la falta de valores predeterminados a nivel de SQL "hace la vida más difícil":si está haciendo todo a través del ORM de Django, donde se aplica el valor predeterminado no hace ninguna diferencia; además, como dijo Adrian en ese ticket, hacerlo en SQL en realidad reduciría la funcionalidad actual al hacer que cosas como los valores predeterminados a los que se puede llamar sean imposibles.
También debe reflexionar sobre por qué está permitiendo que estos detalles relativamente triviales eclipsen los grandes beneficios que le brinda Django:ORM expresivo, lenguaje de plantilla, comunidad próspera, gran cantidad de aplicaciones de terceros ... Pero, incluso dicho eso, una vez más eres libre de elegir otra cosa si realmente no funciona para ti.