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]
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),

View File

@ -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``