using knockout.js with django forms?

后端 未结 2 1690
野的像风
野的像风 2021-02-07 13:07

I am looking to add some structure to my client side code and have been reading about knockout.js. I have been reading the documentations and have a simple question

2条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-02-07 13:31

    You can add custom attributes to your fields in the Form's Meta definition with widgets.

    class SomeForm(forms.ModelForm):
        class Meta:
            model = SomeModel
            widgets = {'field_name1': forms.Textarea(attrs={'data-bind':'value: field1'}),
                       'field_name2': forms.TextInput(attrs={'data-bind':'value: field2'})}
    

    For example, the first field would be rendered:

    
    

    Update: as a bonus here is an easy way to change an attribute for every field in a form, for example if they all need a specific class (helpful for other js addons or css styling)

        def __init__(self, *args, **kwargs):
            super(SomeForm, self).__init__(*args, **kwargs)
            for name, field in self.fields.items():
                field.widget.attrs['class'] = 'some_form_field'
                # this could be used in your case if the Django field name is the
                # same as the KO.js field name
                field.widget.attrs['data-bind'] = 'value: %s' % name
    

提交回复
热议问题