2012-01-28 26 views
24

Tôi có một vài hành động để thực hiện khi lưu một mô hình, đặc biệt là từ quản trị viên. Tôi viết hoa một vài trường và kiểm tra để đảm bảo rằng một trường hoặc trường khác được điền. Tôi cũng tạo ra các slug trường. Bây giờ, những điều này được phân chia giữa việc ghi đè các hàm sạch và chức năng lưu. Nó hoạt động ngay bây giờ, nhưng tôi tò mò khi nào nên sử dụng. Tôi nhìn qua các tài liệu, và tôi không thể tìm thấy cụ thể để sử dụng khi nào.Django Overriding Model Clean() vs Save()

Trả lời

30

Bạn nên sử dụng sạch để thực hiện công việc liên quan đến xác thực và phân tích cú pháp/thay đổi/nếu không xóa đầu vào. Việc tận dụng các trường và tạo một con sên có thể xảy ra ở đây. Tôi cũng sử dụng sạch để buộc trường như post_type thành giá trị cụ thể trong các mô hình proxy. Nếu bạn nâng cao django.core.exceptions.ValidationError('error text') trong sạch, thì 'error text' sẽ được thêm vào form.non_field_errors.

Lưu là nơi thay đổi cách mô hình thực sự được lưu. Ví dụ, tôi đã sử dụng lưu để tạo ra một cây trồng của một hình ảnh được tải lên. ValidationError s không bị bắt nếu được nêu ở đây, và tôi cảm thấy như đó là sự khác biệt thực tế quan trọng nhất giữa hai người.

+2

Ah đã đánh cắp các từ ngay trên bàn phím của tôi. Câu trả lời hay. Điều duy nhất tôi sẽ thêm vào là một liên kết đến các tài liệu, nơi có một ví dụ hay về 'ValidationError' đang được ném: https://docs.djangoproject.com/en/dev/ref/models/instances/#django .db.models.Model.clean –

+4

Không phải django.forms.ValidationError, nhưng django.core.exceptions.ValidationError – benjaoming

+0

Bắt tốt. Tôi đoán tôi đã luôn luôn nhập khẩu nó từ các hình thức (mà nhập nó từ core.exceptions). Cập nhật câu trả lời. – dokkaebi