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: http://code.djangoproject.com/svn/django/trunk@257 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2005-07-20 22:55:01 +00:00
parent 895d232671
commit bc5359f754
2 changed files with 23 additions and 5 deletions

View File

@ -2049,10 +2049,11 @@ class ForeignKey(Field):
return [formfields.IntegerField] return [formfields.IntegerField]
class ManyToManyField(Field): 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['name'] = kwargs.get('name', to._meta.module_name)
kwargs['verbose_name'] = kwargs.get('verbose_name', to._meta.verbose_name_plural) 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), num_in_admin=kwargs.pop('num_in_admin', 0),
related_name=kwargs.pop('related_name', None), related_name=kwargs.pop('related_name', None),
filter_interface=kwargs.pop('filter_interface', None), filter_interface=kwargs.pop('filter_interface', None),

View File

@ -455,12 +455,17 @@ Field Types
Many-to-many relations are a bit different from other fields. First, they 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. 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. Second, they don't take the same options as the rest of the fields. The
The only arguments taken are: only arguments taken are:
======================= ============================================================ ======================= ============================================================
Argument Description 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 ``related_name`` See the description of ``related_name`` in
``ManyToOneField``, above. ``ManyToOneField``, above.
@ -471,7 +476,19 @@ Field Types
should the interface be stacked horizontally or should the interface be stacked horizontally or
vertically). 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`` ``NullBooleanField``