Hi All,
does anybody have experience with the following data model and could advise which Django tools fit it best?
Background:
I
have two types of Components (Core and Complex) that share many
attributes and methods, but also have their own, specific data fields
and methods.
What complicates the design is the fact, that
ComplexComponent might have CoreComponents assigned to it. A
CoreComponent instance might be a "self-standing" entity without any relation to ComplexComponent, but there are
also CoreComponents created only for the purpose of "building"
ComplexComponents.
ComplexComponent (although complex :) )
might (or might not) use CoreComponents in its structure ("complexity"
comes then from a different, unrelated feature).
99.99%
of the time I need to be able to handle instances of CoreComponent
(self-standing entities) and instances of ComplexComponent (with their
linked core components) separately in different views/areas of my
application, however I can envision some special use cases where I would
need to use aggregation on both types to return data for some dash
board type of views (e.g. average cost of all components created this
year).
Also, when a ComplexComponent is handled/displayed in
the view, I need to be able to access CoreComponents that "compose" it
(if applicable).
I'm trying to figure out
what Django tools to use for modelling this setup and would be thankful
to hear your take on that problem.
My current setup uses base Component concrete model and
CoreComponent/ComplexComponent deriving from it (and also being concrete
models).
I end up with three different tables. Having core
components and complex components in separate tables seemed right
initially, but I know this approach might be difficult to handle down
the road, so I'm thinking about restructuring it and using e.g. Proxy
models instead? If I rebuild these models now, I would prefer to do it
"right".
Does anybody have
experience with a similar (the same?) design and could advise what would
be the best tool in Django to implement this?
Below a simplified view of the classes in scope (only for demonstration purpose).
Many thanks for any feedback.
Have a nice day!