diff --git a/pgsync/sync.py b/pgsync/sync.py index 20f9cd8c..3e5fb835 100644 --- a/pgsync/sync.py +++ b/pgsync/sync.py @@ -464,22 +464,46 @@ def _insert_op( ) raise - # set the parent as the new entity that has changed - foreign_keys = self.query_builder._get_foreign_keys( - node.parent, - node, - ) + if node in node.parent.relationship.throughs: + foreign_keys = self.query_builder._get_foreign_keys( + node.parent, + node, + ) + filters[node.parent.name] = [] + for payload in payloads: + primary_values: list = [ + payload.data[key] for key in node.model.primary_keys + ] + + for i, key in enumerate(foreign_keys[node.parent.name]): + for val in primary_values: + filters[node.parent.table].append( + {foreign_keys[node.parent.name][i]: val}, + ) - 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] - } - ) + for pk in self.tree.root.model.primary_keys: + for val in primary_values: + filters[self.tree.root.table].append( + {pk: val} + ) + + else: + # set the parent as the new entity that has changed + 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: