Próbuję utworzyć mapowanie ORM Django, które jest zgodne z istniejącym data model, więc staram się pracować z istniejącym zestawem tabeli i kolumny nazwy.Dziedziczenie wielu tabel Django: określ niestandardową kolumnę jeden-do-jednego
Mam sytuacji dziedziczenia wielu tabel, gdzie klasa InformationObject pochodzi z klasy Object. Chciałbym pozwolić Django obsłużyć to zwykły sposób:
class Object(models.Model):
class Meta:
db_table = "object"
class InformationObject(Object):
class Meta:
db_table = "information_object"
W tym przypadku Django automatycznie utworzyć pole typu jeden-do-jednego modelu dziedziczenie zwanego object_ptr_id. Jednak w schemacie, do którego jestem zmuszony użyć, odniesienie do obiektu nazywa się po prostu "id". A więc:
Czy istnieje sposób, aby w jakikolwiek sposób określić nazwę kolumny, którą Django automatycznie używa do dziedziczenia wielu tabel?
Alternatywa, które będę musiał wykorzystać w inny sposób, jest użycie wyraźne pole typu jeden-do-jednego, ale wtedy nie będzie mógł dziedziczyć metody non-bazy danych z modelu obiektowego:
class Object(models.Model):
class Meta:
db_table = "object"
class InformationObject(models.Model):
class Meta:
db_table = "information_object"
id = models.OneToOneField(Object, primary_key=True, db_column="id")
Wszelkie pomysły? Może mógłbym utworzyć wspólną dla nich klasę bazową i umieścić tam metody inne niż db ...?
Twój ostatni pomysł jest całkiem solidne: stworzyć wspólną klasę bazową dla obu z nich i używać go jako wstawek, aby zapewnić dodatkową funkcjonalność, której szukasz . Proponuję spróbować jako eksperyment. (Może się nie udać, warstwa bazy danych Django robi całkiem fajne rzeczy z metaclami Pythona, ale warto spróbować.) –