[Changeset] r11724 - in django/trunk: django/db/models/fields tests/modeltests tests/modeltests/model_package tests/modeltests/model_package/models

View: New views
1 Messages — Rating Filter:   Alert me  

[Changeset] r11724 - in django/trunk: django/db/models/fields tests/modeltests tests/modeltests/model_package tests/modeltests/model_package/models

by noreply-71 :: Rate this Message:

Reply (Restricted by the Administrator) | Reply to Author | View Threaded | Show Only this Message


Author: russellm
Date: 2009-11-05 05:57:28 -0600 (Thu, 05 Nov 2009)
New Revision: 11724

Added:
   django/trunk/tests/modeltests/model_package/
   django/trunk/tests/modeltests/model_package/__init__.py
   django/trunk/tests/modeltests/model_package/models/
   django/trunk/tests/modeltests/model_package/models/__init__.py
   django/trunk/tests/modeltests/model_package/models/article.py
   django/trunk/tests/modeltests/model_package/models/publication.py
   django/trunk/tests/modeltests/model_package/tests.py
Modified:
   django/trunk/django/db/models/fields/related.py
Log:
Fixed #12168 -- Corrected the registration of m2m autocreated models when models.py is split into submodules. Thanks to Jens Diemer for the report and test case.

Modified: django/trunk/django/db/models/fields/related.py
===================================================================
--- django/trunk/django/db/models/fields/related.py 2009-11-04 15:05:49 UTC (rev 11723)
+++ django/trunk/django/db/models/fields/related.py 2009-11-05 11:57:28 UTC (rev 11724)
@@ -829,9 +829,18 @@
         'auto_created': klass,
         'unique_together': (from_, to)
     })
+    # If the models have been split into subpackages, klass.__module__
+    # will be the subpackge, not the models module for the app. (See #12168)
+    # Compose the actual models module name by stripping the trailing parts
+    # of the namespace until we find .models
+    parts = klass.__module__.split('.')
+    while parts[-1] != 'models':
+        parts.pop()
+    module = '.'.join(parts)
+    # Construct and return the new class.
     return type(name, (models.Model,), {
         'Meta': meta,
-        '__module__': klass.__module__,
+        '__module__': module,
         from_: models.ForeignKey(klass, related_name='%s+' % name),
         to: models.ForeignKey(to_model, related_name='%s+' % name)
     })

Added: django/trunk/tests/modeltests/model_package/__init__.py
===================================================================
--- django/trunk/tests/modeltests/model_package/__init__.py                        (rev 0)
+++ django/trunk/tests/modeltests/model_package/__init__.py 2009-11-05 11:57:28 UTC (rev 11724)
@@ -0,0 +1 @@
+

Added: django/trunk/tests/modeltests/model_package/models/__init__.py
===================================================================
--- django/trunk/tests/modeltests/model_package/models/__init__.py                        (rev 0)
+++ django/trunk/tests/modeltests/model_package/models/__init__.py 2009-11-05 11:57:28 UTC (rev 11724)
@@ -0,0 +1,3 @@
+# Import all the models from subpackages
+from article import Article
+from publication import Publication

Added: django/trunk/tests/modeltests/model_package/models/article.py
===================================================================
--- django/trunk/tests/modeltests/model_package/models/article.py                        (rev 0)
+++ django/trunk/tests/modeltests/model_package/models/article.py 2009-11-05 11:57:28 UTC (rev 11724)
@@ -0,0 +1,10 @@
+from django.db import models
+from django.contrib.sites.models import Site
+
+class Article(models.Model):
+    sites = models.ManyToManyField(Site)
+    headline = models.CharField(max_length=100)
+    publications = models.ManyToManyField("model_package.Publication", null=True, blank=True,)
+
+    class Meta:
+        app_label = 'model_package'

Added: django/trunk/tests/modeltests/model_package/models/publication.py
===================================================================
--- django/trunk/tests/modeltests/model_package/models/publication.py                        (rev 0)
+++ django/trunk/tests/modeltests/model_package/models/publication.py 2009-11-05 11:57:28 UTC (rev 11724)
@@ -0,0 +1,7 @@
+from django.db import models
+
+class Publication(models.Model):
+    title = models.CharField(max_length=30)
+
+    class Meta:
+        app_label = 'model_package'

Added: django/trunk/tests/modeltests/model_package/tests.py
===================================================================
--- django/trunk/tests/modeltests/model_package/tests.py                        (rev 0)
+++ django/trunk/tests/modeltests/model_package/tests.py 2009-11-05 11:57:28 UTC (rev 11724)
@@ -0,0 +1,34 @@
+"""
+>>> from models.publication import Publication
+>>> from models.article import Article
+>>> from django.contrib.auth.views import Site
+
+>>> p = Publication(title="FooBar")
+>>> p.save()
+>>> p
+<Publication: Publication object>
+
+>>> from django.contrib.sites.models import Site
+>>> current_site = Site.objects.get_current()
+>>> current_site
+<Site: example.com>
+
+# Regression for #12168: models split into subpackages still get M2M tables
+
+>>> a = Article(headline="a foo headline")
+>>> a.save()
+>>> a.publications.add(p)
+>>> a.sites.add(current_site)
+>>> a.save()
+
+>>> a = Article.objects.get(id=1)
+>>> a
+<Article: Article object>
+>>> a.id
+1
+>>> a.sites.count()
+1
+
+"""
+
+


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Django updates" group.
To post to this group, send email to django-updates@...
To unsubscribe from this group, send email to django-updates+unsubscribe@...
For more options, visit this group at http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---