diff options
| author | Gary Wilson Jr <gary.wilson@gmail.com> | 2008-08-16 20:59:06 +0000 |
|---|---|---|
| committer | Gary Wilson Jr <gary.wilson@gmail.com> | 2008-08-16 20:59:06 +0000 |
| commit | a949f9ec7d8bdd348f628c2d579f4cc633c56e56 (patch) | |
| tree | 98930e4bcf3b5920e516b176b924c6bacdeef2a1 /django | |
| parent | a2be52fd2a27b5a39744939c906cd57507aa8f10 (diff) | |
Fixed #3121 -- Made `get_or_create()` work for `RelatedManager` and `ManyRelatedManager`.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8415 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/fields/related.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index e90c54df4e..e2c78ef96b 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -311,6 +311,13 @@ class ForeignRelatedObjectsDescriptor(object): return new_obj create.alters_data = True + def get_or_create(self, **kwargs): + # Update kwargs with the related object that this + # ForeignRelatedObjectsDescriptor knows about. + kwargs.update({rel_field.name: instance}) + return super(RelatedManager, self).get_or_create(**kwargs) + get_or_create.alters_data = True + # remove() and clear() are only provided if the ForeignKey can have a value of null. if rel_field.null: def remove(self, *objs): @@ -409,6 +416,16 @@ def create_many_related_manager(superclass, through=False): return new_obj create.alters_data = True + def get_or_create(self, **kwargs): + obj, created = \ + super(ManyRelatedManager, self).get_or_create(**kwargs) + # We only need to add() if created because if we got an object back + # from get() then the relationship already exists. + if created: + self.add(obj) + return obj, created + get_or_create.alters_data = True + def _add_items(self, source_col_name, target_col_name, *objs): # join_table: name of the m2m link table # source_col_name: the PK colname in join_table for the source object |
