Skip to content

fix(serializers): support comma-separated string parsing in TagListSerializerField (#919) - #951

Open
SparshGarg999 wants to merge 3 commits into
jazzband:masterfrom
SparshGarg999:fix-919-tag-serializer-string-parsing
Open

fix(serializers): support comma-separated string parsing in TagListSerializerField (#919)#951
SparshGarg999 wants to merge 3 commits into
jazzband:masterfrom
SparshGarg999:fix-919-tag-serializer-string-parsing

Conversation

@SparshGarg999

Copy link
Copy Markdown

Fixes #919

Problem

When using TaggitSerializer and TagListSerializerField, string inputs were only accepted if they were valid JSON arrays (e.g. ["tag1", "tag2"]). Submitting standard comma-separated tag strings (e.g. "tag1, tag2" or "\"multi word\", tag3"), like what standard form TagField accepts via parse_tags(), resulted in a ValidationError ("invalid_json").

Solution

  • Updated TagListSerializerField.to_internal_value to support comma-separated and quoted string tag lists via parse_tags(value) when input is provided in string format.
  • Maintained strict JSON list validation for strings explicitly formatted as JSON arrays (starting with [).
  • Added comprehensive unit tests in tests/test_serializers.py covering comma-separated strings, quoted strings, empty strings, invalid types, and serializer creation/update workflows.

SparshGarg999 and others added 3 commits August 20, 2026 00:30
When TagField has disabled=True, Django passes the initial value into clean().
For ModelForms or initial values providing model instances or tag lists,
super().clean() converted the list to a string ('[<Tag: ...>]') which was
subsequently corrupted by parse_tags().

Safely return non-string values and handle string/None initials when disabled.

Fixes jazzband#943
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.

Missing tag validation in TaggitSerializer and TagListSerializerField

1 participant