2010-09-10 14 views
7

Tôi cần làm sạch một trường cụ thể trong một bộ định dạng nội tuyến và tôi không thể tìm ra cách thực hiện.Làm thế nào để làm sạch một trường nhất định trong một InlineFormSet?

Tôi đã thử với phương thức def clean(self) của biểu mẫu nhưng không biết vị trí để lưu giá trị đã xóa. Nếu tôi cố gắng đặt giá trị đã làm sạch thành forms[0].data['field'] Tôi nhận được lỗi "Trường hợp truy vấn này là không thể thay đổi".

Ở dạng "bình thường", nó hoạt động bằng cách sử dụng phương pháp def clean_fieldXY(self) trong đó tôi return cleaned_value.

Vui lòng trợ giúp.

Trả lời

9

Bạn có thể đặt bộ định dạng nội tuyến để sử dụng một lớp biểu mẫu và sau đó bạn có thể tạo một hàm clean cho trường này.

Trong myapp/forms.py:

class InlineFormsetForm(forms.Form) 
    myfield = forms.CharField(required=False, max_length=50) 

    def clean_myfield(self): 
     data = self.cleaned_data['myfield'] 
     if data == 'badinput': 
      raise forms.ValidationError("I hates it!") 
     return data 

Sau đó, trong myapp/views.py

from myapp.forms import InlineFormsetForm 
from myapp.models import ParentRecord, ChildRecord 

def editmything(request): 
    MyFormSet = inlineformset_factory(ParentRecord, ChildRecord, form=InlineFormsetForm) 
Các vấn đề liên quan