django multivaluefield& multiwidget - 压缩和/或解压缩不起作用

时间:2012-04-29 05:59:19

标签: django django-models django-multiwidget

所有

我有一个带有几乎的MultiValueField的表单。它使用choicefield和charfield(对于小部件使用相应的Select和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()

压缩功能似乎正在起作用;它按预期返回两个字符串的列表。但是"价值"解压缩中的参数始终为None。果然,当我直接检查数据库时,myField列始终设置为null。任何想法压缩和解压缩之间发生了什么?为什么压缩实际存储的值不是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

您应该从实际包含数据的某个字段继承MyTestField。在您的情况下,它可以是CharField或TextField。我认为它会解决问题。