Commit 1b8b9686 authored by Brian Rosner's avatar Brian Rosner
Browse files

Fixed #7947 -- Handle the display of OneToOneField in model forms correctly....

Fixed #7947 -- Handle the display of OneToOneField in model forms correctly. Thanks tyson for the report and original patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8469 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 640e930d
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -128,6 +128,9 @@ class BaseModelAdmin(object):
            formfield = db_field.formfield(**kwargs)
            # Don't wrap raw_id fields. Their add function is in the popup window.
            if not db_field.name in self.raw_id_fields:
                # formfield can be None if it came from a OneToOneField with
                # parent_link=True
                if formfield is not None:
                    formfield.widget = widgets.RelatedFieldWidgetWrapper(formfield.widget, db_field.rel, self.admin_site)
            return formfield

+5 −1
Original line number Diff line number Diff line
@@ -744,7 +744,6 @@ class OneToOneField(ForeignKey):
    """
    def __init__(self, to, to_field=None, **kwargs):
        kwargs['unique'] = True
        kwargs['editable'] = False
        if 'num_in_admin' not in kwargs:
            kwargs['num_in_admin'] = 0
        super(OneToOneField, self).__init__(to, to_field, OneToOneRel, **kwargs)
@@ -755,6 +754,11 @@ class OneToOneField(ForeignKey):
        if not cls._meta.one_to_one_field:
            cls._meta.one_to_one_field = self
    
    def formfield(self, **kwargs):
        if self.rel.parent_link:
            return None
        return super(OneToOneField, self).formfield(**kwargs)

class ManyToManyField(RelatedField, Field):
    def __init__(self, to, **kwargs):
        try:
+20 −0
Original line number Diff line number Diff line
@@ -54,6 +54,12 @@ class Article(models.Model):
    def __unicode__(self):
        return self.headline

class ImprovedArticle(models.Model):
    article = models.OneToOneField(Article)

class ImprovedArticleWithParentLink(models.Model):
    article = models.OneToOneField(Article, parent_link=True)

class PhoneNumber(models.Model):
    phone = models.PhoneNumberField()
    description = models.CharField(max_length=20)
@@ -773,6 +779,20 @@ ValidationError: [u'Select a valid choice. 4 is not one of the available choices
>>> list(f.choices)
[(1L, 'multicategory Entertainment'), (2L, "multicategory It's a test"), (3L, 'multicategory Third'), (4L, 'multicategory Fourth')]

# OneToOneField ###############################################################

>>> class ImprovedArticleForm(ModelForm):
...     class Meta:
...         model = ImprovedArticle
>>> ImprovedArticleForm.base_fields.keys()
['article']

>>> class ImprovedArticleWithParentLinkForm(ModelForm):
...     class Meta:
...         model = ImprovedArticleWithParentLink
>>> ImprovedArticleWithParentLinkForm.base_fields.keys()
[]

# PhoneNumberField ############################################################

>>> class PhoneNumberForm(ModelForm):