django multiwidget解压缩值为None

时间:2016-12-19 00:42:20

标签: python django

我正在继承Django的MultiWidget类并在解压缩方法中遇到问题。正在调用解压缩方法,但是“值”始终为“无”,即使数据库中确实存在此字段的数据。我甚至尝试覆盖render方法,值也是None。问题是在调用解压缩时值应为非空,而是为None。我正在将MultiWidget与MultiValueField的子类结合使用。这是代码:

forms.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())

如果有人可以告诉我为什么我在解压缩中看到None参数为None,那将非常感激。

1 个答案:

答案 0 :(得分:0)

终于弄清楚我做错了什么。事实证明,这个问题毕竟与MultiValueFieldMultiWidget无关,而是与我无关的粗略错误。当我从数据库中获取模型实例时,问题出现在我的更新视图函数中的views.py文件中。我在做:

MyModel(pk=my_id)

当我应该做的时候:

MyModel.objects.get(pk=my_id)

所以我甚至根本没有获得该模型的实例。毋庸置疑,我现在感到非常愚蠢;)但我很高兴它固定下来。希望这能以某种方式帮助别人!