Reputation: 13
I'm working through the design of a Django inventory tracking application, and have hit a snag in the model layout. I have a list of inventoried objects (Assets
), which can either exist in a Warehouse
or in a Shipment
. I want to store different lists of attributes for the two types of locations, e.g.:
Warehouse
s, I want to store the address, manager, etc.Shipment
s, I want to store the carrier, tracking number, etc.Since each Warehouse
and Shipment
can contain multiple Asset
s, but each Asset
can only be in one place at a time, adding a ForeignKey
relationship to the Asset
model seems like the way to go. However, since Warehouse
and Shipment
objects have different data models, I'm not certain how to best do this.
One obvious (and somewhat ugly) solution is to create a Location
model which includes all of the Shipment
and Warehouse
attributes and an is_warehouse
Boolean attribute, but this strikes me as a bit of a kludge. Are there any cleaner approaches to solving this sort of problem (Or are there any non-Django Python libraries which might be better suited to the problem?)
Upvotes: 0
Views: 241
Reputation: 92559
I think its perfectly reasonable to create a "through" table such as location, which associates an asset, a content (foreign key) and a content_type (warehouse or shipment) . And you could set a unique constraint on the asset_fk so thatt it can only exist in one location at a time
Upvotes: 0