2013-08-28 17 views
6

Tôi đang thực hiện xác thực cấp trường tùy chỉnh trong trình nối tiếp của tôi yêu cầu tham chiếu đến một trường khác.Khung hình Django REST: Điểm khác biệt giữa validate_ <fieldname> và xác thực là gì?

Nhìn vào các ví dụ trong Validation documentation, tôi không rõ liệu tôi có nên sử dụng validate_<fieldname> hoặc validate hay không. Dường như cả hai đều có từ điển attrs, vì vậy từ validate_<fieldname> Tôi có thể dễ dàng tham khảo một trường khác từ validate (mặc dù mô tả cho validate cho biết rằng bạn nên sử dụng nó để truy cập nhiều trường). Vậy tại sao có cả hai lựa chọn? Trong trường hợp của tôi, tùy chọn nào là đúng để sử dụng?

Trả lời

17

Tăng số ValidationError bên trong validate_<foo>() sẽ dẫn đến lỗi trường.

{'foo': ['Not a fooish value.']} 

Tăng ValidationError bên trong validate() sẽ dẫn đến lỗi ngoài hiện trường.

{'non_field_errors': ['Foo and bar are not compatible.']} 

Vậy tại sao có cả hai tùy chọn?

Một phần vì lý do trên và một phần vì API nối tiếp phản ánh API biểu mẫu của Django nếu có thể. Có một số khác biệt khi cần, nhưng kiểu dáng validatevalidate_<foo> cũng tương tự.

Trong trường hợp của tôi, tùy chọn nào là đúng để sử dụng?

Cuộc gọi phán đoán, dựa trên thông báo lỗi nào phù hợp hơn.

+2

Neil - 'attrs' là đầu vào cho bộ nối tiếp làm từ điển trước khi nó được xác nhận và khôi phục thành một đối tượng hoàn toàn chính thức. Trên đỉnh đầu của tôi, tôi đoán rằng có thể là để làm với một số đầu vào đã được xác nhận tại thời điểm bạn đang truy cập nó. –

+0

Cảm ơn @Tom. Có cách nào để vượt qua các tham số bổ sung để validate_foo, ví dụ như id của đối tượng? – Neil

+1

Nếu đó là bản cập nhật thì 'self.object' giữ một tham chiếu đến cá thể. –

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