-
-
Notifications
You must be signed in to change notification settings - Fork 6.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Updated NestedBoundField to also handle empty string when rendering its form #3677
Conversation
…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.
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) |
Okay. That's something, tho a minimal code example would still be helpful. |
I agree, I'd love to see a basic example of how this occurs. |
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, {}) |
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. |
Would you consider pulling together a test case? Failing that we might consider merging in any case and adding that as an outstanding issue. |
Sure. Added in this pull request. |
Updated NestedBoundField to also handle empty string when rendering its form
Good stuff, thanks! |
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 aNone
value.