Skip to content

fix: Handle unhashable BooleanField representation value#9973

Open
emfpdlzj wants to merge 1 commit into
encode:mainfrom
emfpdlzj:fix/booleanfield-unhashable-representation
Open

fix: Handle unhashable BooleanField representation value#9973
emfpdlzj wants to merge 1 commit into
encode:mainfrom
emfpdlzj:fix/booleanfield-unhashable-representation

Conversation

@emfpdlzj
Copy link
Copy Markdown

This is a small consistency fix for BooleanField.to_representation(), matching the existing TypeError handling used by to_internal_value() while preserving the existing bool(value) fallback.

Summary

BooleanField.to_representation() now handles unhashable values consistently with to_internal_value().

Previously, values like [], {}, or set() could raise TypeError during membership checks before reaching the existing bool(value) fallback. This change suppresses TypeError around the explicit true/false/null token checks, allowing unrecognized unhashable values to be represented by their truthiness.

Test

  • Added BooleanField representation coverage for empty and non-empty unhashable collection values.
  • Ran:
    uv run --no-project --with 'django==5.2.*' --with 'pytest==9.*' --with pytest-django --with dj-database-url --with importlib-metadata --with pytz -m pytest tests/test_fields.py -k BooleanField

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR makes BooleanField.to_representation() resilient to unhashable values (e.g., [], {}, set()) by suppressing TypeError during membership checks, aligning its behavior with to_internal_value() while preserving the existing bool(value) fallback.

Changes:

  • Wrap BooleanField.to_representation()’s TRUE/FALSE/NULL token membership checks in contextlib.suppress(TypeError).
  • Update BooleanField output tests to use a list of (value, expected) pairs (allowing unhashable test inputs) and add coverage for unhashable collections.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
rest_framework/fields.py Suppresses TypeError during set-membership checks in BooleanField.to_representation() so unhashable values fall back to bool(value).
tests/test_fields.py Extends BooleanField representation coverage to include unhashable collections by switching outputs to tuple-pairs and adding new cases.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants