Skip to content

Commit 0644227

Browse files
committed
Add extra check to make sure conflict_target is a valid field
1 parent 47c2efb commit 0644227

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

psqlextra/compiler.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ def _rewrite_insert(self, sql, return_id=False):
7070
to include the ON CONFLICT clause.
7171
"""
7272

73-
returning = 'id' if return_id else '*'
73+
qn = self.connection.ops.quote_name
74+
returning = qn(self.query.model._meta.pk.name) if return_id else '*'
7475

7576
if self.query.conflict_action.value == 'UPDATE':
7677
return self._rewrite_insert_update(sql, returning)
@@ -148,13 +149,26 @@ def _build_conflict_target(self):
148149
'names and hstore key.'
149150
) % str(self.query.conflict_target))
150151

152+
def _assert_valid_field(field_name):
153+
for field in self.query.objs[0]._meta.local_concrete_fields:
154+
if field.column == field_name:
155+
return
156+
157+
raise SuspiciousOperation((
158+
'%s is not a valid conflict target, specify '
159+
'a list of column names, or tuples with column '
160+
'names and hstore key.'
161+
) % str(field))
162+
151163
for field in self.query.conflict_target:
152164
if isinstance(field, str):
165+
_assert_valid_field(field)
153166
conflict_target.append(qn(field))
154167
continue
155168

156169
if isinstance(field, tuple):
157170
field, key = field
171+
_assert_valid_field(field)
158172
conflict_target.append(
159173
'(%s -> \'%s\')' % (qn(field), key))
160174
continue

0 commit comments

Comments
 (0)