Django

Code

Changeset 7289

Show
Ignore:
Timestamp:
03/18/08 09:08:40 (8 months ago)
Author:
mtredinnick
Message:

Fixed #6641 -- If we lose a race when creating a new object in get_or_create,
re-get the result from the database and return that. Thanks, Jeff Guinness and
Timothée Peignier.

Files:

Legend:

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

    r6838 r7289  
    11from django.conf import settings 
    2 from django.db import connection, transaction 
     2from django.db import connection, transaction, IntegrityError 
    33from django.db.models.fields import DateField, FieldDoesNotExist 
    44from django.db.models import signals, loading 
     
    286286            return self.get(**kwargs), False 
    287287        except self.model.DoesNotExist: 
    288             params = dict([(k, v) for k, v in kwargs.items() if '__' not in k]) 
    289             params.update(defaults) 
    290             obj = self.model(**params) 
    291             obj.save() 
    292             return obj, True 
     288            try: 
     289                params = dict([(k, v) for k, v in kwargs.items() if '__' not in k]) 
     290                params.update(defaults) 
     291                obj = self.model(**params) 
     292                obj.save() 
     293                return obj, True 
     294            except IntegrityError, e: 
     295                return self.get(**kwargs), False 
    293296 
    294297    def latest(self, field_name=None):