Skip to content

Conversation

@Ernest0x
Copy link
Contributor

If a NestedBoundField field has a value of None and is inside another NestedBoundField field, it will have its value converted to an empty string while the form of its enclosing field is being rendered. So, NestedBoundField fields with an empty string value must be handled the same way as NestedBoundField fields with a None value.

…ts form

If a NestedBoundField field has a value of `None` and is inside another NestedBoundField field, it will have its value converted to an empty string while the form of its enclosing field is being rendered. So, NestedBoundField fields with an empty string value must be handled the same way as NestedBoundField fields with a `None` value.
@lovelydinosaur
Copy link
Contributor

Could you give a simple example, demonstrating exactly what gets rendered incorrectly, and how this fix affects it?

@Ernest0x
Copy link
Contributor Author

Could you give a simple example, demonstrating exactly what gets rendered incorrectly, and how this fix affects it?

Of course. I have made the following #3464 (comment)

@lovelydinosaur
Copy link
Contributor

Okay. That's something, tho a minimal code example would still be helpful.

@andrewdodd
Copy link

I agree, I'd love to see a basic example of how this occurs.

@Ernest0x
Copy link
Contributor Author

Ok, here is code that reproduces exactly the error that this pull request fixes:

from rest_framework import serializers
from rest_framework.renderers import HTMLFormRenderer

class Level2NestedSerializer(serializers.Serializer):
    some_field = serializers.CharField()

class Level1NestedSerializer(serializers.Serializer):
    nested2_field = Level2NestedSerializer(allow_null=True)
    another_field = serializers.CharField()

class Level0NestedSerializer(serializers.Serializer):
    nested1_field = Level1NestedSerializer()

serializer = Level0NestedSerializer(data={
    'nested1_field': {
        'nested2_field': None,
        'another_field': 'test'
    }
})

serializer.is_valid()

renderer = HTMLFormRenderer()
for field in serializer:
    rendered = renderer.render_field(field, {})

@lovelydinosaur
Copy link
Contributor

Okay, and how does the HTML form render before/after the fix. (Include screenshots if you're feeling generous! 😎 )

@Ernest0x
Copy link
Contributor Author

Okay, and how does the HTML form render before/after the fix. (Include screenshots if you're feeling generous! )

Before the fix, it does not render at all. It crashes with a traceback.
After the fix, it renders ok. For the nested field with None value, an empty form is rendered.

@lovelydinosaur lovelydinosaur added this to the 3.3.2 Release milestone Nov 27, 2015
@lovelydinosaur
Copy link
Contributor

Would you consider pulling together a test case? Failing that we might consider merging in any case and adding that as an outstanding issue.

@Ernest0x
Copy link
Contributor Author

Would you consider pulling together a test case?

Sure. Added in this pull request.

lovelydinosaur added a commit that referenced this pull request Nov 27, 2015
Updated NestedBoundField to also handle empty string when rendering its form
@lovelydinosaur lovelydinosaur merged commit 8dea1ae into encode:master Nov 27, 2015
@lovelydinosaur
Copy link
Contributor

Good stuff, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants