Tengo un formulario con el que deseo actualizar un objeto MyModel. En el modelo hay una restricción unique_together, fieldA junto con fieldB. En la forma en el método de limpieza, compruebo esta restricción única.campo deshabilitado no se transfiere - solución necesaria
Por alguna razón, tengo que mostrar fieldA como readonly en la actualización. Por lo tanto fieldA no se pasa. Mi problema es que si el formulario no valida, el formulario se vuelve a mostrar, pero he perdido el valor en el campoA.
He intentado restaurar clean_data ['fieldA'], pero no funciona. ¿Alguna idea de qué cambiar?
Forms.py
class MyModelUpdateForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyModelUpdateForm, self).__init__(*args, **kwargs)
self.fields['fieldA'].widget.attrs['readonly'] = True
self.fields['fieldA'].widget.attrs['disabled'] = True
def clean(self):
cleaned_data = self.cleaned_data
fieldA= self.instance.fieldA
fieldB = cleaned_data.get("fieldB")
if MyModel.objects.filter(fieldA=fieldA, fieldB=fieldB).count() > 0:
#try to reset fieldA, since it is not passed through, since it is disabled
cleaned_data['fieldA'] = fieldA.pk #does not work
raise forms.ValidationError('some unique validation error')
return cleaned_data
Views.py:
myModelobject = get_object_or_404(MyModel.objects, pk=mymodel_id)
if request.method == 'POST':
model_form = MyModelUpdateForm(request.POST, instance=myModelobject)
if model_form .is_valid():
....
request.POST hackign era la solución! ¡gracias por esto! –
Bien, pero ¿qué haces en el caso de las casillas de verificación? ¿Puedes distinguir entre marcar o desmarcar una casilla de verificación? –
Encontré usando "readonly" para el elemento de entrada es mejor que hackear POST o ... http://www.w3schools.com/tags/att_input_readonly.asp –