'Adding namespaced attribute to django-crispy-form field

I was trying to add a namespaced attribute (x-bind:attr) to a crispy form field but I couldn't find a solution that works. I know that attributes with a dash are handled by using an underscore, I tried to do the same by replacing double underscore with the double colon but it didn't work and no replacement is made.

class ChildFormSetHelperUpdate(FormHelper):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.form_tag = False
        self.include_media = False
        self.layout = Layout(
            Div(Field('model', x_bind__disable="disableInput"), css_class='col-md-6'),
        )
        self.render_required_fields = True```


Solution 1:[1]

You can achieve this by passing the keyword argument in a dictionary, and expanding that into the kwargs for Field using the ** unpacking operator:

Field('model', **{"x-bind:disable": "disableInput"})

This gets around the fact that you can't use dashes and colons in Python variable names. The attribute will be rendered as:

<input ... x-bind:disable="disableInput">

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1