Django, как заполнить виджет пользовательской формы
Я создал виджет формы, который сохраняет адрес в виде списка.
class AddressWidget(MultiWidget):
def __init__(self, base_widget, attrs=None):
widgets = (
forms.TextInput(attrs={'placeholder': 'Address', 'class': 'form-control'}),
forms.TextInput(attrs={'placeholder': 'Address Line 2', 'class': 'form-control'}),
forms.TextInput(attrs={'placeholder': 'City', 'class': 'form-control'}),
forms.TextInput(attrs={'placeholder': 'State', 'class': 'form-control'}),
forms.TextInput(attrs={'placeholder': 'Postcode', 'class': 'form-control'}),
)
super().__init__(widgets, attrs)
def decompress(self, value):
if value:
return (value.address1, value.address2, value.city, value.state, value.postcode)
return (None, None, None, None, None)
Сохранение формы работает так, как я хочу, но при повторном входе в форму для изменения значения, оно не заполняется, хотя все остальные обычные поля заполняются.
Как мне заставить его заполнить поле?
В MultiWidget
decompress
загрузите из str
, поскольку вы храните его как TextField
в вашей модели:
class AddressWidget(MultiWidget):
...
def decompress(self, value):
if value:
return json.loads(value)
return (None, None, None, None, None)
В MultiValueField
compress
, дамп в JSON str
вместо возврата value_list
напрямую:
class AddressField(MultiValueField):
...
def compress(self, value_list):
if value_list:
return json.dumps(value_list)
return ''