Ticket #2512: django_fix_pkonly_update_#2512.diff

File django_fix_pkonly_update_#2512.diff, 1.5 KB (added by Daniel Hahler, 18 years ago)
  • django/db/models/base.py

     
    173173            # Determine whether a record with the primary key already exists.
    174174            cursor.execute("SELECT 1 FROM %s WHERE %s=%%s LIMIT 1" % \
    175175                (backend.quote_name(self._meta.db_table), backend.quote_name(self._meta.pk.column)), [pk_val])
    176             # If it does already exist, do an UPDATE.
     176            # If it does already exist and there are non-pk fields, do an UPDATE.
    177177            if cursor.fetchone():
    178178                db_values = [f.get_db_prep_save(f.pre_save(self, False)) for f in non_pks]
    179                 cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
    180                     (backend.quote_name(self._meta.db_table),
    181                     ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]),
    182                     backend.quote_name(self._meta.pk.column)),
    183                     db_values + [pk_val])
     179                if db_values:
     180                    cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
     181                        (backend.quote_name(self._meta.db_table),
     182                        ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]),
     183                        backend.quote_name(self._meta.pk.column)),
     184                        db_values + [pk_val])
    184185            else:
    185186                record_exists = False
    186187        if not pk_set or not record_exists:
Back to Top