【发布时间】: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 存储在列中。