我试图在一个Charfield上保存多个复选框选择,但我无法绕过以下消息:
Select a valid choice. ['...', '...', '...'] is not one of the available choices.
我想将选定的值与管道分隔的值保存在数据库的单个属性中。我已经为2个multipleechoicefields创建了“clean”方法,但似乎错误发生在清理之后。检查结果字符串是否出现在可能值列表中。这就是我想要推翻的。下面是我使用的代码:
催产术_表单.py
class EstomatologiaForm(forms.ModelForm):
sinais_e_sintomas_locais = forms.MultipleChoiceField(
choices=Estomatologia.TIPOS_SINAIS_E_SINTOMAS,
widget=forms.CheckboxSelectMultiple(),
label='Sinais e Sintomas locais (marque todas as opções válidas) *',
)
...
def __init__(self, *args, **kwargs):
if 'instance' in kwargs:
if kwargs['instance'] is not None:
kwargs['initial'] = {}
ssl = kwargs['instance'].sinais_e_sintomas_locais.split('|')
cp = kwargs['instance'].comorbidades_paciente.split('|')
kwargs['initial']['sinais_e_sintomas_locais'] = ssl
kwargs['initial']['comorbidades_paciente'] = cp
super(EstomatologiaForm, self).__init__(*args, **kwargs)
#OBS: campos para MultipleChoiceField não devem receber esses valores em 'class'.
#Do contrario os checkbox não são desenhados corretamente
for field_name in self.fields:
if field_name != "sinais_e_sintomas_locais" and field_name != "comorbidades_paciente":
self.fields[field_name].widget.attrs.update({
'class': 'form-control form-dinamico',
})
def clean_sinais_e_sintomas_locais(self):
import ipdb
ipdb.set_trace()
ssl = self.cleaned_data['sinais_e_sintomas_locais']
self.cleaned_data['sinais_e_sintomas_locais'] = '|'.join(ssl)
return self.cleaned_data['sinais_e_sintomas_locais']
def clean_comorbidades_paciente(self):
import ipdb
ipdb.set_trace()
cp = self.cleaned_data['comorbidades_paciente']
self.cleaned_data['comorbidades_paciente'] = '|'.join(cp)
return self.cleaned_data['comorbidades_paciente']
def save(self, *args, **kwargs):
import ipdb
ipdb.set_trace()
instance = super(EstomatologiaForm, self).save(*args, **kwargs)
instance.sinais_e_sintomas_locais = self.cleaned_data['sinais_e_sintomas_locais']
instance.comorbidades_paciente = self.cleaned_data['comorbidades_paciente']
instance.save()
return instance
模型.py
^{pr2}$错误消息的意思是:“选择一个有效的选项。Derenagem_pus | nenhum_dos_anteriores不是可用的选择之一。”
在你的模型中-你用的是。。。在
。。。并且有
choices=TIPOS_SINAIS_E_SINTOMAS
,它在只有一个选择的情况下有效,但是如果您试图用管道分隔多个选择,它们将无法匹配并导致验证错误。在解决方案:删除
^{pr2}$choices=
选项。尽管-在用管道分隔这些值并将其保存为clean_<field>
方法并将其保存为CharField
之前,您应该检查这些值是否都是有效的选择,例如:相关问题 更多 >
编程相关推荐