Tags in forms¶
The TaggableManager
will show up automatically as a field in a
ModelForm
or in the admin. Tags input via the form field are parsed
as follows:
- If the input doesn’t contain any commas or double quotes, it is simply treated as a space-delimited list of tag names.
- If the input does contain either of these characters:
- Groups of characters which appear between double quotes take precedence as multi-word tags (so double quoted tag names may contain commas). An unclosed double quote will be ignored.
- Otherwise, if there are any unquoted commas in the input, it will be treated as comma-delimited. If not, it will be treated as space-delimited.
Examples:
Tag input string | Resulting tags | Notes |
---|---|---|
apple ball cat | ["apple", "ball", "cat"] |
No commas, so space delimited |
apple, ball cat | ["apple", "ball cat"] |
Comma present, so comma delimited |
“apple, ball” cat dog | ["apple, ball", "cat", "dog"] |
All commas are quoted, so space delimited |
“apple, ball”, cat dog | ["apple, ball", "cat dog"] |
Contains an unquoted comma, so comma delimited |
apple “ball cat” dog | ["apple", "ball cat", "dog"] |
No commas, so space delimited |
“apple” “ball dog | ["apple", "ball", "dog"] |
Unclosed double quote is ignored |
commit=False
¶
If, when saving a form, you use the commit=False
option you’ll need to call
save_m2m()
on the form after you save the object, just as you would for a
form with normal many to many fields on it:
if request.method == "POST":
form = MyFormClass(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
# Without this next line the tags won't be saved.
form.save_m2m()
You can check the details over in the Django documentation on form saving.