我正在继承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,那将非常感激。
答案 0 :(得分:0)
终于弄清楚我做错了什么。事实证明,这个问题毕竟与MultiValueField
或MultiWidget
无关,而是与我无关的粗略错误。当我从数据库中获取模型实例时,问题出现在我的更新视图函数中的views.py文件中。我在做:
MyModel(pk=my_id)
当我应该做的时候:
MyModel.objects.get(pk=my_id)
所以我甚至根本没有获得该模型的实例。毋庸置疑,我现在感到非常愚蠢;)但我很高兴它固定下来。希望这能以某种方式帮助别人!