django-rest-framework
django-rest-framework copied to clipboard
Fix #7722.
Render BooleanFields with allow_null=True as HTML select rather than as HTML checkbox in Browsable API #7722.
Description
This PR is created in order to fix issue #7722. A serializer field of type BooleanField
with allow_null=True
was being rendered as HTML checkbox elements on Browsable API forms even though three values (True, False, and None/null) are possible. It was also happening for the model BooleanField
instances with allow_null=True
that are converted to serializer BooleanField
instances. In this PR, I worked on keeping the checkbox rendering for BooleanField
s with allow_null=False
while providing dropdown rendering (HTML select element) for BooleanField
s with allow_null=True
.
fix #7722 refs #7722
Thanks for working on this. Having a look over, I'm wondering about the alternative of not introducing a new template, and using the existing "select.html" template.
Hi @tomchristie ,
Thank you for your comment. I was thinking about that alternative too. The following part from select.html
was my main hesitation to use it. I was not sure if I should adapt the value of BooleanField
and that part of the template. Without changing that template, I could not think of a solution to drop --------
and introduce unknown
option. What do you think about it?
If unknown
option is not that important, I believe it is possible to make the value of the BoundField
as 'False'
string instead of False
boolean value. That way, for False
, we can avoid if not field.value
.
<select class="form-control" name="{{ field.name }}">
{% if field.allow_null or field.allow_blank %}
<option value="" {% if not field.value %}selected{% endif %}>--------</option>
{% endif %}
</select>
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Could the PR title have some words in it to describe the bug or the fix? Would help all of us looking at notifications or lists of tickets. Thanks!
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
we might need a new taker for this