Szczerze mówiąc, jeśli te rzeczy są dla ciebie blokerami, nie używaj Django. Jestem bardzo silnym zwolennikiem Django, ale jeśli uważasz, że nie spełnia on twoich potrzeb, powinieneś wybrać coś innego.
Muszę jednak powiedzieć, że są to dziwne rzeczy, na których można się skupić. Nie mogę sobie wyobrazić, dlaczego dodatkowe pole klucza podstawowego na pośredniej tabeli M2M miałoby w ogóle stanowić problem. (Zauważ jednak, że pola złożone – w tym PK – były tematem projektu Summer of Code w tym roku i wyglądają na gotowe do połączenia – zobacz https://groups.google.com/forum/#!topic/django-developers/CD7OrkJ63zc )
I znowu, trudno zrozumieć, dlaczego brak wartości domyślnych na poziomie SQL „utrudnia życie”:jeśli robisz wszystko za pomocą ORM Django, gdzie zastosowane są wartości domyślne, nie ma znaczenia; plus, jak powiedział Adrian w tym bilecie, zrobienie tego w SQL faktycznie zmniejszyłoby obecną funkcjonalność, uniemożliwiając takie rzeczy jak wywoływanie wartości domyślnych.
Powinieneś także zastanowić się, dlaczego pozwalasz, by te stosunkowo trywialne szczegóły przyćmiły wielkie korzyści, jakie daje Django:ekspresyjny ORM, język szablonów, kwitnąca społeczność, ogromna liczba aplikacji innych firm… Ale nawet to powiedziawszy, po raz kolejny możesz wybrać coś innego, jeśli to naprawdę nie działa.