Author: russellm
Date: 2010-04-02 10:52:58 -0500 (Fri, 02 Apr 2010)
New Revision: 12909
Modified:
django/branches/releases/1.1.X/django/db/models/fields/related.py
django/branches/releases/1.1.X/tests/regressiontests/m2m_regress/models.py
Log:
[1.1.X] Fixed #11956 -- Modified the handling of m2m relationships between
subclasses. Thanks to nidi for the report, and astoneman for the suggestion on
how to fix the problem.
Backport of r12908 from trunk.
Modified: django/branches/releases/1.1.X/django/db/models/fields/related.py
===================================================================
--- django/branches/releases/1.1.X/django/db/models/fields/related.py
2010-04-02 15:44:48 UTC (rev 12908)
+++ django/branches/releases/1.1.X/django/db/models/fields/related.py
2010-04-02 15:52:58 UTC (rev 12909)
@@ -606,7 +606,7 @@
model=rel_model,
core_filters={'%s__pk' % self.field.related_query_name():
instance._get_pk_val()},
instance=instance,
- symmetrical=(self.field.rel.symmetrical and isinstance(instance,
rel_model)),
+ symmetrical=self.field.rel.symmetrical,
join_table=qn(self.field.m2m_db_table()),
source_col_name=qn(self.field.m2m_column_name()),
target_col_name=qn(self.field.m2m_reverse_name())
@@ -804,7 +804,7 @@
kwargs['rel'] = ManyToManyRel(to,
related_name=kwargs.pop('related_name', None),
limit_choices_to=kwargs.pop('limit_choices_to', None),
- symmetrical=kwargs.pop('symmetrical', True),
+ symmetrical=kwargs.pop('symmetrical',
to==RECURSIVE_RELATIONSHIP_CONSTANT),
through=kwargs.pop('through', None))
self.db_table = kwargs.pop('db_table', None)
Modified:
django/branches/releases/1.1.X/tests/regressiontests/m2m_regress/models.py
===================================================================
--- django/branches/releases/1.1.X/tests/regressiontests/m2m_regress/models.py
2010-04-02 15:44:48 UTC (rev 12908)
+++ django/branches/releases/1.1.X/tests/regressiontests/m2m_regress/models.py
2010-04-02 15:52:58 UTC (rev 12909)
@@ -17,6 +17,13 @@
def __unicode__(self):
return self.name
+# Regression for #11956 -- a many to many to the base class
+class TagCollection(Tag):
+ tags = models.ManyToManyField(Tag, related_name='tag_collections')
+
+ def __unicode__(self):
+ return self.name
+
# A related_name is required on one of the ManyToManyField entries here because
# they are both addressable as reverse relations from Tag.
class Entry(models.Model):
@@ -102,5 +109,17 @@
>>> w.save()
>>> w.delete()
+# Regression for #11956 -- You can add an object to a m2m with the
+# base class without causing integrity errors
+>>> c1 = TagCollection.objects.create(name='c1')
+>>> c1.tags = [t1,t2]
+
+>>> c1 = TagCollection.objects.get(name='c1')
+>>> c1.tags.all()
+[<Tag: t1>, <Tag: t2>]
+
+>>> t1.tag_collections.all()
+[<TagCollection: c1>]
+
"""
}
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.