Django的multivaluefield&multiwidget - 压缩和/或解压缩不工作
问题描述:
所有,Django的multivaluefield&multiwidget - 压缩和/或解压缩不工作
我有一个表格有MultiValueField是几乎作品。它采用了choicefield和charfield(具有相应的选择和TextInput的小部件)::
custom_choices = [("one","one"),("two","two"),("other","other")]
class MyMultiWidget(forms.MultiWidget):
def __init__(self,*args,**kwargs):
widgets = (
forms.Select(choices=custom_choices),
forms.TextInput(),
)
super(MyMultiWidget, self).__init__(widgets,*args,**kwargs)
def decompress(self, value):
if value:
return value.split("|")
return ['', '']
class MyMultiValueField(forms.MultiValueField):
def __init__(self, *args, **kwargs):
fields = (
forms.ChoiceField(required=True),
forms.CharField(max_length=128,required=False),
)
super(MyMultiValueField, self).__init__(fields, *args, **kwargs)
self.widget = TestMultiWidget()
def compress(self, data_list):
if data_list:
return '|'.join(data_list)
class MyTestField(models.Field):
def formfield(self, **kwargs):
return super(MyTestField, self).formfield(form_class=MyMultiValueField)
class MyModel(models.Model):
myField = MyTestField()
压缩功能似乎是工作;它会按照预期返回两个字符串的列表。但解压缩中的“值”参数始终为无。果然,当我直接检查数据库时,myField列始终设置为空。任何想法在压缩和解压缩之间发生了什么?为什么压缩的值实际上不被存储?
谢谢。
答
您应该从实际包含数据的某个字段继承MyTestField。你的情况可以是CharField或TextField。我认为它会解决问题。
您应该从实际包含数据的某个字段继承“MyTestField”。你的情况可以是'CharField'或'TextField'。我认为它会解决问题。 – ilvar 2012-04-30 04:37:08
谢谢。这确实有帮助(如果你将它作为答案,我会将其标记为已接受)。但是也发现了另一个问题,我的代码发布为[另一个问题](http://stackoverflow.com/questions/10454164/django-multivaluefield-multiwidget-make-one-optional) – trubliphone 2012-05-04 18:24:31