Nie jest to możliwe, chyba że jest abstrakcyjne, a oto dlaczego: LongNamedRestaurantjest również a Place, nie tylko jako klasa, ale także w bazie danych. Tabela miejsc zawiera wpisy dla wszystkich czystych Placei dla wszystkich LongNamedRestaurant. LongNamedRestaurantpo prostu tworzy dodatkową tabelę z food_typei odniesieniem do tabeli miejsc.
Jeśli to zrobisz Place.objects.all(), otrzymasz również każde miejsce, które jest LongNamedRestauranti będzie to wystąpienie Place(bez food_type). Więc Place.namei LongNamedRestaurant.namedzielić tę samą kolumnę bazy danych, a zatem musi być tego samego typu.
Myślę, że ma to sens w przypadku normalnych modeli: każda restauracja jest miejscem i powinna mieć przynajmniej wszystko, co ma to miejsce. Może ta spójność jest także powodem, dla którego nie było możliwe dla modeli abstrakcyjnych przed 1.10, chociaż nie spowodowałoby tam problemów z bazą danych. Jak zauważa @lampslave, stało się to możliwe w 1.10. Osobiście zalecałbym ostrożność: jeśli Sub.x zastępuje Super.x, upewnij się, że Sub.x jest podklasą Super.x, w przeciwnym razie Sub nie może być używany zamiast Super.x.
Obejście problemu : Możesz utworzyć niestandardowy model użytkownika ( AUTH_USER_MODEL), który wiąże się z duplikacją kodu, jeśli potrzebujesz tylko zmienić pole adresu e-mail. Alternatywnie możesz zostawić wiadomość e-mail bez zmian i upewnić się, że jest wymagana we wszystkich formach. Nie gwarantuje to integralności bazy danych, jeśli używają jej inne aplikacje, i nie działa na odwrót (jeśli chcesz, aby nazwa użytkownika nie była wymagana).