Django multiwidget解压缩值为非

2024-09-30 12:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将Django的MultiWidget类子类化,并在解压缩方法中遇到问题。正在调用解压缩方法,但是“value”始终为“None”,即使数据库中确实存在此字段的数据。我甚至尝试重写render方法,这里的value也为None。问题是,在调用解压缩时,值应该是非Null,但是它不是None。我正在将MultiWidget与MultiValueField的一个子类结合使用。代码如下:

表单.py:

class MyMultiWidget(forms.widgets.MultiWidget):

    def __init__(self, attrs=None):
        self.attrs = attrs
        widgets = (
            TextInput(),
            TextInput(),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
            CheckboxInput(attrs={'value': False}),
        )
        super(MyMultiWidget, self).__init__(widgets, attrs)

    def decompress(self, value):   # decompress stored database format to HTML form format
        print('decompress called')
        print("this is my value: " + str(value))
        if value:
            dict_value = json.loads(value)
            return dict_value
        return ""

#===============================================================

class MyMultiField(forms.fields.MultiValueField):
    widget = MyMultiWidget

    def __init__(self, *args, **kwargs):
        fields = (
            forms.CharField(),
            forms.CharField(),
            forms.BooleanField(),
            forms.BooleanField(),
            forms.BooleanField(),
            forms.BooleanField(),
            forms.BooleanField(),
            forms.BooleanField(),
            forms.BooleanField(),
            forms.BooleanField(),
            forms.BooleanField(),
        )
        super(MyMultiField, self).__init__(fields=fields, *args, **kwargs)

    def compress(self, values):
        print('my values: ' + str(values))
        return json.dumps(values)

#===============================================================

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
            self.helper = FormHelper()
            self.helper.form_tag = False
            self.helper.layout = Layout(
            )
            super(MyForm, self).__init__(*args, **kwargs)

    class Meta:
        model = MyModel

    my_multi_field = MyMultiField(required=False, widget=MyMultiWidget())

如果有人能告诉我为什么我在解压中没有看到值的论点,那将是非常感谢。在


Tags: selfnonefalsefieldsinitvaluedefargs
1条回答
网友
1楼 · 发布于 2024-09-30 12:27:32

终于发现我做错了什么。事实证明,这个问题与MultiValueField或{}无关,而是我粗心的打字错误。问题出在我的视图.py从数据库中获取模型实例时更新视图函数中的文件。我在做:

MyModel(pk=my_id)

我应该做的是:

MyModel.objects.get(pk=my_id)

所以我根本没有得到模型的实例。不用说我现在觉得很傻;)但我很高兴它被修好了。希望这对其他人有所帮助!在

相关问题 更多 >

    热门问题