@@ -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