summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorRenaud Parent <renaud.parent@gmail.com>2014-06-06 16:16:17 +0000
committerTim Graham <timograham@gmail.com>2014-06-18 13:53:07 -0400
commit87d0a3384cc263fe0df749a28e2fbc1e1240f043 (patch)
tree6cb2c535b6977abd626cf96fede8fcca5595300a /django/db
parentde9012907063e210e97c0d65cde312ff6174d420 (diff)
Fixed #22778 -- Added a model Meta option to define default_related_name.
Thanks jorgecarleitao and mmardini for reviews.
Diffstat (limited to 'django/db')
-rw-r--r--django/db/models/options.py4
-rw-r--r--django/db/models/related.py9
2 files changed, 11 insertions, 2 deletions
diff --git a/django/db/models/options.py b/django/db/models/options.py
index 632c71f3f9..39f0ab6f19 100644
--- a/django/db/models/options.py
+++ b/django/db/models/options.py
@@ -20,7 +20,7 @@ DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
'order_with_respect_to', 'app_label', 'db_tablespace',
'abstract', 'managed', 'proxy', 'swappable', 'auto_created',
'index_together', 'apps', 'default_permissions',
- 'select_on_save')
+ 'select_on_save', 'default_related_name')
def normalize_together(option_together):
@@ -99,6 +99,8 @@ class Options(object):
# A custom app registry to use, if you're making a separate model set.
self.apps = apps
+ self.default_related_name = None
+
@property
def app_config(self):
# Don't go through get_app_config to avoid triggering imports.
diff --git a/django/db/models/related.py b/django/db/models/related.py
index 6e4f946ea9..51460eedbe 100644
--- a/django/db/models/related.py
+++ b/django/db/models/related.py
@@ -57,7 +57,14 @@ class RelatedObject(object):
# If this is a symmetrical m2m relation on self, there is no reverse accessor.
if getattr(self.field.rel, 'symmetrical', False) and self.model == self.parent_model:
return None
- return self.field.rel.related_name or (self.opts.model_name + '_set')
+ if self.field.rel.related_name:
+ return self.field.rel.related_name
+ if self.opts.default_related_name:
+ return self.opts.default_related_name % {
+ 'model_name': self.opts.model_name.lower(),
+ 'app_label': self.opts.app_label.lower(),
+ }
+ return self.opts.model_name + '_set'
else:
return self.field.rel.related_name or (self.opts.model_name)