Skip to content
Snippets Groups Projects
Commit dfc58532 authored by Martin Burchell's avatar Martin Burchell
Browse files

Added tags field to form

I had originally thought the field could be called terms[free-tags] and
we could use this notation for any other taxonomy-related field. This
would be too difficult in Django so I've used the name tags as was
already in the template.
parent d107d467
No related branches found
No related tags found
1 merge request!46Tagging frontend
......@@ -19,6 +19,10 @@ class AddEditItemForm(forms.Form):
widget=forms.HiddenInput,
required=True
)
tags = forms.CharField(
widget=forms.Textarea,
required=False
)
def __init__(self, item_type, *args, **kwargs):
""" Add extra fields depending on item_type """
......
......@@ -725,7 +725,7 @@ def test_redirected_to_home_if_next_absent_after_delete(
@pytest.mark.django_db
def test_free_tags_created_on_item_update(view, form):
form.cleaned_data['terms[free-tags]'] = 'Monrovia|Important|age 35-40'
form.cleaned_data['tags'] = 'Monrovia|Important|age 35-40'
view.form_valid(form)
assert_no_messages(view.request, messages.ERROR)
......@@ -745,7 +745,7 @@ def test_free_tags_created_on_item_update(view, form):
def test_existing_tag_deleted_on_item_update(view, form):
transport.items.add_free_terms(view.item['id'], 'free-tags', ['age 35-40'])
form.cleaned_data['terms[free-tags]'] = 'Monrovia'
form.cleaned_data['tags'] = 'Monrovia'
view.form_valid(form)
assert_no_messages(view.request, messages.ERROR)
......@@ -759,7 +759,7 @@ def test_existing_tag_deleted_on_item_update(view, form):
@pytest.mark.django_db
def test_free_tags_created_for_new_item(add_view, form):
form.cleaned_data['terms[free-tags]'] = 'Monrovia|Important|age 35-40'
form.cleaned_data['tags'] = 'Monrovia|Important|age 35-40'
form.cleaned_data['id'] = 0
add_view.form_valid(form)
......@@ -774,3 +774,36 @@ def test_free_tags_created_for_new_item(add_view, form):
taxonomies = [t['taxonomy'] for t in item['terms']]
assert 'free-tags' in taxonomies
@pytest.mark.django_db
def test_form_initial_values_include_tags(generic_item):
with patch('hid.views.item.transport.items.get') as get_item:
generic_item['terms'] = [
{
'taxonomy': 'free-tags',
'name': 'Monrovia',
'long_name': 'Monrovia',
},
{
'taxonomy': 'free-tags',
'name': 'age 35-40',
'long_name': 'Age 35-40',
},
{
'taxonomy': 'free-tags',
'name': 'interesting',
'long_name': 'Interesting',
},
]
get_item.return_value = generic_item
(view, response) = make_request(
AddEditItemView,
'edit-item',
kwargs={'item_id': 103}
)
initial = view.get_initial()
assert initial['tags'] == 'Monrovia|age 35-40|interesting'
from datetime import datetime
import re
from django.contrib import messages
from django.core.urlresolvers import reverse
......@@ -26,6 +25,7 @@ class ItemNotFound(Exception):
class AddEditItemView(FormView):
template_name = "hid/add_edit_item.html"
form_class = AddEditItemForm
field_taxonomies = {'tags': 'free-tags'}
def _initialize_item(self, item_id, item_type):
""" Initialize the view's item from the given item id or item_type
......@@ -166,6 +166,15 @@ class AddEditItemView(FormView):
and len(self.item_terms[taxonomy]) > 0):
initial['category'] = self.item_terms[taxonomy][0]['name']
taxonomy_fields = dict(zip(self.field_taxonomies.values(),
self.field_taxonomies.keys()))
for taxonomy, terms in self.item_terms.iteritems():
field_name = taxonomy_fields.get(taxonomy)
if field_name:
term_names = [t['name'] for t in terms]
initial[field_name] = '|'.join(term_names)
return initial
def get_form(self, form_class):
......@@ -240,13 +249,12 @@ class AddEditItemView(FormView):
free_terms = {}
regular_fields = {}
for (name, value) in data.iteritems():
pattern = re.compile('terms\[([-_\w]+)\]')
matches = re.match(pattern, name)
if matches is not None:
free_terms[matches.groups()[0]] = value
for (field_name, field_value) in data.iteritems():
taxonomy = self.field_taxonomies.get(field_name)
if taxonomy is not None:
free_terms[taxonomy] = field_value
else:
regular_fields[name] = value
regular_fields[field_name] = field_value
return category, free_terms, regular_fields
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment