2015-12-10 22 views

Trả lời

9

Nếu bạn muốn tạo trường tùy chỉnh, bạn cần phải phân lớp trường và sau đó ghi đè một hoặc cả hai phương thức .to_representation().to_internal_value(). Hai phương thức này được sử dụng để chuyển đổi giữa kiểu dữ liệu ban đầu và kiểu dữ liệu nguyên thủy, có thể tuần tự hóa. Các kiểu dữ liệu nguyên thủy thường sẽ là bất kỳ số, chuỗi, boolean, ngày/giờ/datetime hoặc Không. Chúng cũng có thể là bất kỳ danh sách hoặc từ điển nào giống như đối tượng chỉ chứa các đối tượng nguyên thủy khác. Các loại khác có thể được hỗ trợ, tùy thuộc vào trình kết xuất mà bạn đang sử dụng.

Phương thức .to_representation() được gọi để chuyển đổi kiểu dữ liệu ban đầu thành kiểu dữ liệu nguyên thủy, có thể tuần tự hóa.

Phương thức to_internal_value() được gọi để khôi phục kiểu dữ liệu nguyên thủy vào biểu diễn python nội bộ của nó. Phương thức này sẽ tăng một serializers.ValidationError nếu dữ liệu không hợp lệ.

Lưu ý rằng lớp WritableField đã có trong phiên bản 2.x không còn tồn tại. Bạn nên phân lớp Trường và ghi đè to_internal_value() nếu trường hỗ trợ nhập dữ liệu.

Ref:

  1. http://www.django-rest-framework.org/api-guide/fields/#custom-fields
  2. https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L417
Các vấn đề liên quan