【问题标题】:django multivaluefield & multiwidget - compress and/or decompress not workingdjango multivaluefield & multiwidget - 压缩和/或解压缩不起作用
【发布时间】:2012-05-09 08:23:26
【问题描述】:

全部,

我有一个带有 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()

压缩功能似乎起作用了;它按预期返回两个字符串的列表。但解压缩中的“值”参数始终为无。果然,当我直接查看数据库时,myField 列始终设置为 null。任何想法压缩和解压缩之间发生了什么?为什么 compress 的值实际上没有被存储?

谢谢。

【问题讨论】:

  • 你应该从一些实际包含数据的字段继承MyTestField。在您的情况下,它可以是 CharFieldTextField。我认为它会解决问题。
  • 谢谢。这确实有帮助(如果您将其作为答案,我会将其标记为已接受)。但也发现了我发布为another question的代码的另一个问题

标签: django django-models django-multiwidget


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 2011-09-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多