У меня есть форма, с которой я хочу обновить объект MyModel. На модели существует единственное ограничение типа fieldA вместе с полем B. В форме в чистом методе я проверяю это уникальное ограничение.отключенное поле не проходит - обходной путь
По некоторым причинам я должен показать fieldA как только в обновлении. Таким образом, поле А не проходит. Моя проблема в том, что если форма не проверяется, форма повторно отображается, но я потерял значение в поле А.
Я попытался сбросить cleaned_data ['fieldA'], но он не работает. Любая идея, что изменить?
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 было решение! Спасибо за это! –
Ничего, но что вы будете делать в случае флажков. Хо, вы различаете флажок, который отключен или не установлен. –
Я нашел использование «readonly» для элемента ввода лучше, чем взломать POST или ... http://www.w3schools.com/tags/att_input_readonly.asp –