Mam formularz, za pomocą którego chcę zaktualizować obiekt MyModel. W modelu występuje ograniczenie unique_together, pole A wraz z fieldB. W formularzu w czystej metodzie sprawdzam to unikalne ograniczenie.wyłączone pole nie zostało przekazane - wymagane obejście
Z pewnych powodów muszę pokazywać pole A jako tylko do odczytu w aktualizacji. Zatem pole A nie jest przepuszczane. Mój problem polega na tym, że jeśli formularz nie zostanie zatwierdzony, formularz zostanie ponownie wyświetlony, ale straciłem wartość w polu A.
Próbowałem zresetować clean_data ['fieldA'], ale to nie działa. Każdy pomysł, co zmienić?
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():
....
hackign request.POST było rozwiązanie! dzięki za to! –
Dobrze, ale co robisz w przypadku pól wyboru. Czy rozróżniasz pole wyboru wyłączone lub niezaznaczone. –
Zauważyłem, że używanie "tylko do odczytu" dla elementu wejściowego jest lepsze niż hakowanie POST lub ... http://www.w3schools.com/tags/att_input_readonly.asp –