【问题标题】:django multiwidget decompress value is Nonedjango multiwidget 解压值为 None
【发布时间】:2016-12-19 00:42:19
【问题描述】:

我正在继承 Django 的 MultiWidget 类并在解压缩方法中遇到问题。正在调用解压缩方法,但是即使数据库中确实有该字段的数据,“值”始终为 None。我什至尝试覆盖渲染方法,这里的值也是 None 。问题是调用解压缩时值应该是非 Null,而是 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 的 value 参数,那将不胜感激。

【问题讨论】:

  • 我不能告诉你为什么你会看到 None 但我可以告诉你你做错了什么。将 CSV 存储在列中。

标签: python django


【解决方案1】:

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

MyModel(pk=my_id)

当我应该做的时候:

MyModel.objects.get(pk=my_id)

所以我什至没有得到模型的实例。不用说我现在感觉很愚蠢;)但我很高兴它已修复。希望这能以某种方式帮助其他人!

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 2011-02-09
    • 2011-03-31
    • 2023-04-05
    • 2020-02-02
    • 1970-01-01
    • 2018-12-19
    • 2010-12-19
    • 2012-05-14
    相关资源
    最近更新 更多