 <p>Django's ORM will have trouble working with this table unless you add a unique primary key column.</p> <p>If you do add a primary key, then it would be trivial to write a method to query for a given product ID and return a list of the values corresponding to that product ID. Something like:</p> <pre><code>def names_for(product_id): return [row.namestring for row in ProductName.objects.filter(product_id=product_id)] </code></pre> <p>This function could also be a custom manager method, or a method on your Product model, or whatever makes most sense to you.</p> <p><strong>EDIT</strong>: Assuming you have a Product model that the product_id in this table refers to, and the only use you'll have for this table is to look up these names for a given product, your other option is to leave this table out of the ORM altogether, and just write a method on Product that <a href="http://docs.djangoproject.com/en/dev/topics/db/sql/" rel="nofollow noreferrer">uses raw SQL and cursor.execute</a> to fetch the names for that product. This is nice and clean and doesn't require adding a unique PK to the table. The main thing you lose is the ability to administer this table via Django modelforms or the admin.</p>