 <p>It's not actually a Django question but rather a ORM question, you need to understand what and how ORM works (apart from the language and the framework used). Your case yields different results:</p> <p>1 Bridge can Have Many workers (One (bridge) &lt;--* Many (Worker), ForeignKey)</p> <p>1 Bridge can have 1 worker (One (Bridge) &lt;--> One (Worker), One To One field)</p> <p>Many Bridges can have many workers (Many (Bridges) * -- * many (Workers), Many to Many field)</p> <p>If you use a ForeignKey from tools to builders, it means that a worker can have many tools, but each tool is unique to a worker, if you have many to many then any worker can have any tool. If you need tools to belong to many different workers, then you need a many to many relation, if the tools need some specific restrictions (like skills) then again a many to many relation with specific limitations (a through table could hold extra information regarding the association, like worker 1 uses tool 1 every friday, that would be a through table of workers to tools with the middle table holding the day the worker uses the specific tool).</p>