diff --git a/django/core/meta.py b/django/core/meta.py index c6026e1f01..189114219d 100644 --- a/django/core/meta.py +++ b/django/core/meta.py @@ -2049,10 +2049,11 @@ class ForeignKey(Field): 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), diff --git a/docs/model-api.txt b/docs/model-api.txt index 0011414eed..e52ca8b43d 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -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 vertically). - ``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. ======================= ============================================================ ``NullBooleanField``