Skip to content

Instantly share code, notes, and snippets.

@conor10
Last active October 31, 2022 04:26
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save conor10/8085ac62fd81ad3002e582d1be65c398 to your computer and use it in GitHub Desktop.
Save conor10/8085ac62fd81ad3002e582d1be65c398 to your computer and use it in GitHub Desktop.
class ListTextWidget(forms.TextInput):
def __init__(self, data_list, name, *args, **kwargs):
super(ListTextWidget, self).__init__(*args, **kwargs)
self._name = name
self._list = data_list
self.attrs.update({'list': 'list__{}'.format(self._name)})
def render(self, name, value, attrs=None):
text_html = super(ListTextWidget, self).render(name, value, attrs=attrs)
data_list = '<datalist id="list__{}">'.format(self._name)
for item in self._list:
data_list += '<option value="{}">{}</option>'.format(item[0], item[1])
data_list += '</datalist>'
return text_html + data_list
# Usage
from django import models
class Address(models.Model):
NSW = 'NSW
VIC = 'VIC'
QLD = 'QLD'
SA = 'SA'
WA = 'WA'
TAS = 'TAS'
NT = 'NT'
STATES = (
(NSW, 'New South Wales'),
(VIC, 'Victoria'),
(QLD, 'Queensland'),
(SA, 'South Australia'),
(WA, 'Western Australia'),
(TAS, 'Tasmania'),
(NT, 'Northern Territory')
)
from django import forms
class ExampleForm(forms.ModelForm):
class Meta:
model = Address
exclude = ['']
widgets = {
'state': ListTextWidget(data_list=STATES, name='state_list')
}
@russell310
Copy link

update your code
def render(self, name, value, attrs=None): to def render(self, name, value, attrs=None, renderer=None):

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment