On nâng cấp lên Django 1.9, bây giờ tôi nhận được cảnh báoCách xử lý "SubfieldBase đã không được chấp nhận. Thay vào đó hãy sử dụng Field.from_db_value."
RemovedInDjango110Warning: SubfieldBase has been deprecated. Use Field.from_db_value instead.
tôi nhìn thấy nơi mà vấn đề phát sinh. Tôi có một số định nghĩa trường tùy chỉnh và trong đó tôi có __metaclass__ = models.SubfieldBase
. Ví dụ,
class DurationField(models.FloatField):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
...
Nếu tuyên bố __metaclass__
bị phản đối, những gì tôi phải thay thế nó bằng một cách chính xác?
Tôi chỉ lấy nó ra và thêm một phương pháp from_db_value
như trong ví dụ ở đây: https://docs.djangoproject.com/en/1.9/howto/custom-model-fields/#converting-values-to-python-objects ?
Và cách from_db_value
và to_python
khác nhau? Cả hai dường như chuyển đổi dữ liệu cơ sở dữ liệu sang các đối tượng Python?
đây là câu trả lời rất tốt và toàn diện. @mjandrews: tại sao bạn chưa đánh dấu nó là câu trả lời cuối cùng? – pt12lol
Tôi thấy rằng không có metaclass, 'to_python' không phải lúc nào cũng được gọi. Ví dụ, nếu bạn tạo một thể hiện mới của một đối tượng và sau đó cố gắng đọc trường tùy chỉnh, nó sẽ không gọi các phương thức có metaclass mà nó đã gọi phương thức. –