Tôi có một biểu mẫu mà tôi muốn cập nhật đối tượng MyModel. Trên mô hình có một ràng buộc unique_together, fieldA cùng với fieldB. Trong biểu mẫu trong phương thức sạch, tôi kiểm tra ràng buộc duy nhất này.trường bị vô hiệu hóa không được chuyển qua - cách giải quyết cần thiết
Vì một số lý do, tôi phải hiển thị trườngA là chỉ đọc trong bản cập nhật. Do đó fieldA không được truyền qua. Vấn đề của tôi là nếu biểu mẫu không xác thực, biểu mẫu được hiển thị lại, nhưng tôi đã mất giá trị trong trườngA.
Tôi đã cố gắng đặt lại clean_data ['fieldA'], nhưng nó không hoạt động. Bất kỳ ý tưởng nào cần thay đổi?
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 là giải pháp! cám ơn vì cái này! –
Rất tốt, nhưng bạn sẽ làm gì trong trường hợp hộp kiểm. Ho làm bạn phân biệt giữa một hộp kiểm bị vô hiệu hóa hoặc bỏ chọn. –
Tôi tìm thấy bằng cách sử dụng "chỉ đọc" cho phần tử đầu vào tốt hơn so với hacking POST hoặc ... http://www.w3schools.com/tags/att_input_readonly.asp –