Django

Code

Changeset 8415

Show
Ignore:
Timestamp:
08/16/08 15:59:06 (11 months ago)
Author:
gwilson
Message:

Fixed #3121 -- Made get_or_create() work for RelatedManager and ManyRelatedManager.

Files:

Legend:

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

    r8223 r8415  
    312312            create.alters_data = True 
    313313 
     314            def get_or_create(self, **kwargs): 
     315                # Update kwargs with the related object that this 
     316                # ForeignRelatedObjectsDescriptor knows about. 
     317                kwargs.update({rel_field.name: instance}) 
     318                return super(RelatedManager, self).get_or_create(**kwargs) 
     319            get_or_create.alters_data = True 
     320 
    314321            # remove() and clear() are only provided if the ForeignKey can have a value of null. 
    315322            if rel_field.null: 
     
    409416            return new_obj 
    410417        create.alters_data = True 
     418 
     419        def get_or_create(self, **kwargs): 
     420            obj, created = \ 
     421                    super(ManyRelatedManager, self).get_or_create(**kwargs) 
     422            # We only need to add() if created because if we got an object back 
     423            # from get() then the relationship already exists. 
     424            if created: 
     425                self.add(obj) 
     426            return obj, created 
     427        get_or_create.alters_data = True 
    411428 
    412429        def _add_items(self, source_col_name, target_col_name, *objs):