Estoy tratando de crear una asignación ORM de Django que sea compatible con una existente data model, por lo que estoy tratando de trabajar con un conjunto existente de tabla y columna nombres.Herencia múltiple de Django: especifique el nombre personalizado de columna uno a uno
Tengo una situación de herencia multi-tabla donde una clase InformationObject se deriva de la clase Object. Me gustaría dejar que Django manejar esto de la forma habitual:
class Object(models.Model):
class Meta:
db_table = "object"
class InformationObject(Object):
class Meta:
db_table = "information_object"
En este caso Django crearía automáticamente un campo de uno-a-uno en el modelo heredado llamado object_ptr_id. Sin embargo, en el esquema que estoy obligado a usar, la referencia al Objeto simplemente se llama "id". Entonces:
¿Hay alguna manera de especificar de alguna manera el nombre de la columna que Django usa automáticamente para la herencia de tablas múltiples?
La alternativa, que voy a tener que usar otro modo, es el uso de un campo explícito uno-a-uno, pero entonces no será capaz de heredar métodos no de base de datos a partir del modelo del objeto:
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")
¿Alguna idea? ¿Tal vez podría crear una clase base común para ambos y poner allí métodos que no sean DB ...?
Su última idea es bastante sólido: crear una clase base común para los dos, y lo utilizan como un mixin para proporcionar la funcionalidad adicional que usted está buscando . Sugiero probarlo como un experimento. (Puede que no funcione; la capa de base de datos de Django hace algunas cosas lindas con las metaclases de Python, pero vale la pena intentarlo). –