Я подклассифицировал класс MultiWidget Django и столкнулся с проблемой в методе распаковки. Вызывается метод распаковки, однако «значение» всегда равно «Нет», хотя в базе данных для этого поля есть определенные данные. Я даже попробовал переопределить метод рендеринга, а значение здесь тоже отсутствует. Проблема заключается в том, что значение должно быть не-Null при вызове метода распаковки, но вместо этого оно равно None. Я использую MultiWidget в сочетании с подклассом MultiValueField. Вот код:django multiwidget decpress value is None
forms.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())
Если кто не мог сказать мой, почему я вижу Нет для аргумента значения в декомпрессия, что будет высоко ценится.
Я не могу сказать вам, почему вы видите Нет, но я могу сказать вам, что вы делаете неправильно. Хранение CSV в столбце. – e4c5