全て、
ほぼ機能する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()
圧縮機能が機能しているようです。期待どおりに2つの文字列のリストを返します。ただし、解凍の「value」引数は常にNoneです。案の定、データベースを直接チェックすると、myField列は常にnullに設定されます。圧縮と解凍の間に何が起こっているのか、何か考えはありますか?compressの値が実際に保存されないのはなぜですか?
ありがとう。