2013-02-26 33 views
7

Tôi có biểu mẫu dưới đây và muốn thêm xác thực tùy chỉnh vào trường có tên 'billable_work'.Xác thực tùy chỉnh Django ModelForm: Cách truy cập các giá trị trường đã gửi

Làm cách nào để truy cập vào trường 'dự án' đã được gửi trong biểu mẫu? Tôi muốn kiểm tra giá trị của dự án ('p' trong ví dụ dưới đây) nhưng không thể định vị cú pháp thích hợp để tôi có thể kiểm tra giá trị đã gửi. Bất kỳ trợ giúp sẽ được đánh giá cao.

class EntryForm(forms.ModelForm): 
    class Meta: 
     model = Entries 
     exclude = ('billable_work','notes') 

    billable_work = forms.BooleanField() 
    notes = forms.CharField(widget=forms.Textarea,required=False) 

    def clean_billable_work(self): 
     b = self.cleaned_data['billable_work'] 
     p = form.fields['project'] 

     if b == True and p == 523: 
      raise forms.ValidationError(_("Entries cannot be both billable and NONE: Indirect.")) 
     return self.cleaned_data['billable_work'] 

Trả lời

12

Tôi nghĩ bạn muốn ghi đè phương thức clean() trên mô hình của mình thay vì phương pháp sạch của trường biểu mẫu cụ thể. Từ tài liệu -

Phương pháp này nên được sử dụng để cung cấp xác thực mô hình tùy chỉnh và sửa đổi các thuộc tính trên mô hình của bạn nếu muốn. Ví dụ: bạn có thể sử dụng nó để tự động cung cấp giá trị cho một trường hoặc để thực hiện xác thực yêu cầu quyền truy cập vào nhiều hơn một trường đơn lẻ.

Nếu bạn muốn đặt xác thực vào biểu mẫu thì phương pháp clean() trên biểu mẫu cung cấp chức năng tương tự (xem docs).

+1

Cảm ơn bạn đã liên kết trong tài liệu. Tôi đang tìm cú pháp self.cleaned_data.get ('project'). Để kiểm tra giá trị, tôi phải chuyển đổi giá trị này thành chuỗi. Đây có phải là phương pháp thích hợp/hợp lệ không? – Mrak

+0

Tôi không chắc chắn tôi theo dõi? –

Các vấn đề liên quan