Django

Code

Changeset 4459

Show
Ignore:
Timestamp:
02/03/07 18:54:30 (2 years ago)
Author:
russellm
Message:

Fixed #2160 -- Modified object save logic to check for pk is None, rather than bool(pk) == False. This allows primary keys to take a value of 0. Thanks for the report, fgutierrez@aureal.com.pe.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/base.py

    r4265 r4459  
    168168        # First, try an UPDATE. If that doesn't update anything, do an INSERT. 
    169169        pk_val = self._get_pk_val() 
    170         pk_set = bool(pk_val) 
    171170        record_exists = True 
    172         if pk_set
     171        if pk_val is not None
    173172            # Determine whether a record with the primary key already exists. 
    174173            cursor.execute("SELECT 1 FROM %s WHERE %s=%%s LIMIT 1" % \ 
     
    185184            else: 
    186185                record_exists = False 
    187         if not pk_set or not record_exists: 
     186        if pk_val is None or not record_exists: 
    188187            field_names = [backend.quote_name(f.column) for f in self._meta.fields if not isinstance(f, AutoField)] 
    189188            db_values = [f.get_db_prep_save(f.pre_save(self, True)) for f in self._meta.fields if not isinstance(f, AutoField)] 
    190189            # If the PK has been manually set, respect that. 
    191             if pk_set
     190            if pk_val is not None
    192191                field_names += [f.column for f in self._meta.fields if isinstance(f, AutoField)] 
    193192                db_values += [f.get_db_prep_save(f.pre_save(self, True)) for f in self._meta.fields if isinstance(f, AutoField)] 
     
    209208                     backend.quote_name(self._meta.pk.column), 
    210209                     backend.get_pk_default_value())) 
    211             if self._meta.has_auto_field and not pk_set
     210            if self._meta.has_auto_field and pk_val is None
    212211                setattr(self, self._meta.pk.attname, backend.get_last_insert_id(cursor, self._meta.db_table, self._meta.pk.column)) 
    213212        transaction.commit_unless_managed()