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 |
|
No commas, so space delimited |
apple, ball cat |
|
Comma present, so comma delimited |
“apple, ball” cat dog |
|
All commas are quoted, so space delimited |
“apple, ball”, cat dog |
|
Contains an unquoted comma, so comma delimited |
apple “ball cat” dog |
|
No commas, so space delimited |
“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.