You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
21 lines
959 B
21 lines
959 B
from django.db.backends.postgresql.introspection import DatabaseIntrospection as PostgresDatabaseIntrospection |
|
|
|
class DatabaseIntrospection(PostgresDatabaseIntrospection): |
|
|
|
def get_relations(self, cursor, table_name): |
|
""" |
|
Returns a dictionary of {field_index: (field_index_other_table, other_table)} |
|
representing all relationships to the given table. Indexes are 0-based. |
|
""" |
|
cursor.execute(""" |
|
SELECT con.conkey, con.confkey, c2.relname |
|
FROM pg_constraint con, pg_class c1, pg_class c2 |
|
WHERE c1.oid = con.conrelid |
|
AND c2.oid = con.confrelid |
|
AND c1.relname = %s |
|
AND con.contype = 'f'""", [table_name]) |
|
relations = {} |
|
for row in cursor.fetchall(): |
|
# row[0] and row[1] are single-item lists, so grab the single item. |
|
relations[row[0][0] - 1] = (row[1][0] - 1, row[2]) |
|
return relations
|
|
|