Browse files

Added optional rel_name parameter to ManyToManyField, which makes it …

…possible to many-to-many-relate a single model to another model more than once. Also updated the model docs to reflect this

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
1 parent 895d232 commit bc5359f754f7afe6b4aa1eb4972c32a508b7fb55 @adrianholovaty adrianholovaty committed Jul 20, 2005
Showing with 23 additions and 5 deletions.
  1. +3 −2 django/core/
  2. +20 −3 docs/model-api.txt
@@ -2049,10 +2049,11 @@ def get_manipulator_field_objs(self):
return [formfields.IntegerField]
class ManyToManyField(Field):
- def __init__(self, to, **kwargs):
+ def __init__(self, to, rel_name=None, **kwargs):
kwargs['name'] = kwargs.get('name', to._meta.module_name)
kwargs['verbose_name'] = kwargs.get('verbose_name', to._meta.verbose_name_plural)
- kwargs['rel'] = ManyToMany(to, to._meta.object_name.lower(),
+ rel_name = rel_name or to._meta.object_name.lower()
+ kwargs['rel'] = ManyToMany(to, rel_name,
num_in_admin=kwargs.pop('num_in_admin', 0),
related_name=kwargs.pop('related_name', None),
filter_interface=kwargs.pop('filter_interface', None),
@@ -455,12 +455,17 @@ Field Types
Many-to-many relations are a bit different from other fields. First, they
aren't actually a field per se, because they use a intermediary join table.
- Second, they don't take any of the same options as the rest of the fields.
- The only arguments taken are:
+ Second, they don't take the same options as the rest of the fields. The
+ only arguments taken are:
======================= ============================================================
Argument Description
======================= ============================================================
+ ``rel_name`` Use this if you have more than one
+ ``ManyToOneField`` s in the same model that relate
+ to the same model. Django will use ``rel_name`` in
+ the generated API.
``related_name`` See the description of ``related_name`` in
``ManyToOneField``, above.
@@ -471,7 +476,19 @@ Field Types
should the interface be stacked horizontally or
- ``limit_choices_to`` See the description under ``ManyToOneField``, above.
+ ``limit_choices_to`` See the description under ``ManyToOneField`` above.
+ ``name`` An alphanumeric name for the relationship. If this
+ isn't provided, Django uses the ``module_name`` of
+ the related object.
+ This is only really useful when you have a single
+ object that relates to the same object more than
+ once.
+ ``verbose_name`` A human-readable name for the object, singular. If
+ this isn't provided, Django uses the
+ ``verbose_name`` for the related object.
======================= ============================================================

0 comments on commit bc5359f

Please sign in to comment.