From bd6be30b4f7d1f1f11403f68a6e3ae94f70d9471 Mon Sep 17 00:00:00 2001 From: Miguel Paolino Date: Mon, 24 Oct 2022 16:38:23 -0300 Subject: [PATCH] Fix inserts on through tables --- pgsync/sync.py | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/pgsync/sync.py b/pgsync/sync.py index 791630c2..6d05d74e 100644 --- a/pgsync/sync.py +++ b/pgsync/sync.py @@ -470,23 +470,39 @@ def _insert_op( ) raise - # set the parent as the new entity that has changed - filters[node.parent.table] = [] - foreign_keys = self.query_builder._get_foreign_keys( - node.parent, - node, - ) + if node in node.parent.relationship.throughs: + through: Node = node.parent.relationship.throughs[0] + foreign_keys = self.query_builder.get_foreign_keys( + through, + node.parent + ) - for payload in payloads: - for i, key in enumerate(foreign_keys[node.name]): - if key == foreign_keys[node.parent.name][i]: - filters[node.parent.table].append( - { - foreign_keys[node.parent.name][ - i - ]: payload.data[key] - } - ) + filters[node.parent.name] = [] + for payload in payloads: + for i, key in enumerate(foreign_keys[node.parent.name]): + filters[node.parent.name].append({ + foreign_keys[node.parent.name][ + i + ]: payload.data[key] + }) + else: + # set the parent as the new entity that has changed + filters[node.parent.table] = [] + foreign_keys = self.query_builder._get_foreign_keys( + node.parent, + node, + ) + + for payload in payloads: + for i, key in enumerate(foreign_keys[node.name]): + if key == foreign_keys[node.parent.name][i]: + filters[node.parent.table].append( + { + foreign_keys[node.parent.name][ + i + ]: payload.data[key] + } + ) else: