#23927: Decouple Form field_names to its representation in HTML
--------------------------------+--------------------
     Reporter:  jorgecarleitao  |      Owner:  nobody
         Type:  New feature     |     Status:  new
    Component:  Forms           |    Version:  1.7
     Severity:  Normal          |   Keywords:
 Triage Stage:  Unreviewed      |  Has patch:  0
Easy pickings:  0               |      UI/UX:  0
--------------------------------+--------------------
 Consider a form

 {{{
 class SearchForm(forms.Form):
     search = forms.CharField(required=False)
 }}}

 and a view that uses the form in a GET:

 {{{
 def get_names(request):

     if request.method == 'GET':
         form = SearchForm(request.GET)
         if form.is_valid():
             query_result = ...
             context = {'results': query_result, 'form': form}
         else:
             # handle failure
     else:
         form = SearchForm()

     return render(request, 'name.html', {'form': form})
 }}}

 When the form is submitted trough GET, one gets an url like
 `www.example.com/persons?search=...`

 However, we typically want to i18n the parameters of the URL. I don't find
 an easy way to do that. The way I'm doing now is
 {{{
     def add_prefix(self, field_name):
         # HACK: ensures 'search' appears in translations
         if field_name == 'search':
             return _('search')
         return _(field_name)  # assumes other fields exist in the
 translations
 }}}

 The suggestion here is to add an interface on the `Form` for the user to
 overwrite how the form field names are mapped to html (currently they are
 mapped to `field_name`). The implementation could be something on the
 lines of:

 1. maps `field_name` to its translation when the form is converted to
 HTML.
 2. maps translation back to `field_name` when the form receives data.

 The flow could be: `SearchForm()` expects `{'busca': ...}`, and
 `cleaned_data` returns `{'search': ...}`.

 By default this mapping is the identity (1. field_name -> field_name; 2.
 field_name -> field_name), that recovers the existing situation and is
 thus backward compatible.

--
Ticket URL: <https://code.djangoproject.com/ticket/23927>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/057.0d7ecfd13fa1d4eb77734c53b5bfa664%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to