Fixed #3 -- Made OneToOneField act like ForeignKey and ManyToManyField. This is the last big API change before the official launch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@59 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2005-07-15 18:40:21 +00:00
parent 7b47dcd773
commit dc2933f73b
2 changed files with 19 additions and 3 deletions

View File

@ -2076,6 +2076,23 @@ class ManyToManyField(Field):
choices = self.get_choices(include_blank=False) choices = self.get_choices(include_blank=False)
return [curry(formfields.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)] return [curry(formfields.SelectMultipleField, size=min(max(len(choices), 5), 15), choices=choices)]
class OneToOneField(IntegerField):
def __init__(self, to, to_field=None, rel_name=None, **kwargs):
kwargs['name'] = kwargs.get('name', 'id')
kwargs['verbose_name'] = kwargs.get('verbose_name', 'ID')
to_field = to_field or to._meta.pk.name
rel_name = rel_name or to._meta.object_name.lower()
kwargs['rel'] = OneToOne(to, rel_name, to_field,
num_in_admin=kwargs.pop('num_in_admin', 0),
edit_inline=kwargs.pop('edit_inline', False),
edit_inline_type=kwargs.pop('edit_inline_type', STACKED),
related_name=kwargs.pop('related_name', None),
limit_choices_to=kwargs.pop('limit_choices_to', None),
lookup_overrides=kwargs.pop('lookup_overrides', None),
raw_id_admin=kwargs.pop('raw_id_admin', False))
kwargs['primary_key'] = True
IntegerField.__init__(self, **kwargs)
#################### ####################
# RELATIONSHIPS # # RELATIONSHIPS #
#################### ####################

View File

@ -141,8 +141,7 @@ method. For example::
class Restaurant(meta.Model): class Restaurant(meta.Model):
... ...
fields = ( fields = (
meta.IntegerField('id', 'ID', primary_key=True, meta.OneToOneField(places.Place),
rel=meta.OneToOne(places.Place, 'place', 'id')),
... ...
) )
@ -294,7 +293,7 @@ For example::
Changing objects Changing objects
================ ================
Once you've retrieved an object from the database using any of the above Once you've retrieved an object from the database using any of the above
options, changing it is extremely easy. Make changes directly to the options, changing it is extremely easy. Make changes directly to the
objects fields, then call the object's ``save()`` method:: objects fields, then call the object's ``save()`` method::