Commit e5de0e22 authored by Florian Sachs's avatar Florian Sachs

get_primary_key() works with inheritance and multpiple pks

* `contrib.sqla.tools.get_primary_key()` now works with inhteritance *and* multiple primary keys.

Every primary key is checked if it is a inherited one, and if it's inherited, the *current* column.key is returned. I *think* it should be safe just to use *prop.expression* here, but I am not absolutely sure.

( see http://docs.sqlalchemy.org/en/rel_0_8/orm/internals.html?highlight=columnproperty#sqlalchemy.orm.properties.ColumnProperty.expression )
parent 22c925e2
...@@ -21,10 +21,12 @@ def get_primary_key(model): ...@@ -21,10 +21,12 @@ def get_primary_key(model):
pks = [] pks = []
for p in props: for p in props:
if hasattr(p, 'columns'): if hasattr(p, 'expression'): # expression = primary column or expression for this ColumnProperty
for c in p.columns: if p.expression.primary_key:
if c.primary_key: if is_inherited_primary_key(p):
pks.append(c.key) pks.append(get_column_for_current_model(p).key)
else:
pks.append(p.columns[0].key)
if len(pks) == 1: if len(pks) == 1:
return pks[0] return pks[0]
elif len(pks) > 1: elif len(pks) > 1:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment