首页 > 解决方案 > CheckboxSelectMultiple 以酥脆的形式,自定义数据属性

问题描述

我想覆盖 CheckboxSelectMultiple 以便我可以使用以下逻辑为表单提供 data- 属性:

class MySelect(forms.Select):

    def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
        option = super(forms.Select, self).create_option(name, value, label, selected, index, subindex, attrs)
        if value:
            for k,attr in self.attrs.items():
                # if it has a data attr in it
                if k[:4] == 'data':
                    #instantiate a new object and add the data attr to the option
                    current_object = self.choices.queryset.model.objects.get(pk=value)
                    option['attrs'].update({
                        k: getattr(current_object, attr)
                    })
        return option

这适用于非脆皮形式,但由于脆皮从不调用此方法,它不会以这种方式工作。我想覆盖 CheckboxSelectMultiple create_option 方法。有什么优雅的方法可以解决这个问题而不必覆盖整个表单字段渲染过程?我尝试使用自定义 html,但是(就我的技能而言)要获得具有选中属性的正常工作 CheckboxSelectMultiple 非常复杂。

这是我到目前为止所做的:

class MyCheckboxSelectMultiple(forms.CheckboxSelectMultiple):

    def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
        option = super(forms.CheckboxSelectMultiple, self).create_option(name, value, label, selected, index, subindex, attrs)
        if value:
            for k,attr in self.attrs.items():
                # if it has a data attr in it
                if k[:4] == 'data':
                    #instantiate a new object and add the data attr to the option
                    current_object = self.choices.queryset.model.objects.get(pk=value)
                    option['attrs'].update({
                        k: getattr(current_object, attr)
                    })
        return option

标签: djangodjango-crispy-forms

解决方案


推荐阅读