我正在将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())
如果有人能告诉我为什么我在解压中没有看到值的论点,那将是非常感谢。在
终于发现我做错了什么。事实证明,这个问题与}无关,而是我粗心的打字错误。问题出在我的视图.py从数据库中获取模型实例时更新视图函数中的文件。我在做:
MultiValueField
或{MyModel(pk=my_id)
我应该做的是:
MyModel.objects.get(pk=my_id)
所以我根本没有得到模型的实例。不用说我现在觉得很傻;)但我很高兴它被修好了。希望这对其他人有所帮助!在
相关问题 更多 >
编程相关推荐