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 ''
Вернуться на верх