En primer lugar, algunos enlaces a páginas que he usado como referencia: una pregunta de SO , y los documentos de Django sobre relaciones genéricas y herencia de múltiples tablas .
Hasta ahora, tengo un diseño de herencia de múltiples tablas configurado. Los objetos (por ejemplo: Car, Dog, Computer) pueden heredar una clase de Item. Necesito poder recuperar elementos de la base de datos, obtener la subclase y hacer cosas con ella. Mi diseño no permite recuperar los diferentes tipos de objetos uno por uno, así que necesito usar el contenedor de elementos para envolverlos todos en uno. Una vez que tengo el artículo, los documentos de Django dicen que puedo obtener la subclase haciendo referencia al atributo con el nombre del modelo (por ejemplo: myitem.car o myitem.computer).
No sé a qué tipo de objeto hace referencia mi artículo, así que, ¿cómo puedo obtener al niño? ¿Hay una forma incorporada para hacer esto? Aquí hay algunas otras ideas que tuve: (algunas más locas que otras)
Como puede ver, estas soluciones propuestas no son tan elegantes, pero espero que no tenga que usar una de ellas y que alguien aquí tenga una mejor sugerencia.
Gracias por adelantado
He hecho algo similar al método 2 en uno de mis proyectos:
from django.db import models from django.contrib.contenttypes.models import ContentType class BaseModel(models.Model): type = models.ForeignKey(ContentType,editable=False) # other base fields here def save(self,force_insert=False,force_update=False): if self.type_id is None: self.type = ContentType.objects.get_for_model(self.__class__) super(BaseModel,self).save(force_insert,force_update) def get_instance(self): return self.type.get_object_for_this_type(id=self.id)
Sería mejor componer los modelos de un modelo de artículo y un modelo de tipo de artículo. Los modelos de subclasificación suenan bien y son útiles en algunos casos de vanguardia, pero en general, es más seguro y más eficiente atenerse a las tácticas que funcionan con su base de datos, en lugar de en contra.