Nếu tôi có một số giá trị (chuỗi) từ yêu cầu GET hoặc POST với các trường hợp Property
liên quan, một IntegerProperty
và một TextProperty
, có cách nào đó để chuyển đổi các giá trị sang loại người dùng thích hợp mà không có chuỗi dài tẻ nhạt trong số isinstance
cuộc gọi?Cách đúng để chuyển đổi chuỗi thành loại thích hợp cho thuộc tính NDB?
Tôi đang tìm để tái tạo loại này chức năng (tất cả các xác nhận đầu vào bỏ qua cho rõ ràng):
for key, value in self.request.POST.iteritems():
prop = MyModel._properties[key]
if isinstance(prop, ndb.IntegerProperty):
value = int(value)
elif isinstance(prop, (ndb.TextProperty, ndb.StringProperty)):
pass # it's already the right type
elif ...
else
raise RuntimeError("I don't know how to deal with this property: {}"
.format(prop))
setattr(mymodelinstance, key, value)
Ví dụ, nếu có một cách để có được những lớp int
từ một IntegerProperty
và lớp bool
từ một số BooleanProperty
v.v., điều đó sẽ thực hiện công việc.
API siêu dữ liệu ndb không thực sự giải quyết điều này một cách tao nhã, theo như tôi thấy; với get_representations_of_kind
Tôi có thể giảm số lượng các trường hợp, mặc dù.
Tôi có thể cảm thấy nỗi đau của bạn ... một câu hỏi, bạn nên biết các loại dữ liệu dự kiến từ các mục ** POST **, vậy tại sao không chỉ nhận được ** giá trị ** theo dự kiến ** phím ** và chuyển đổi chúng thành loại thích hợp? – Anzel
@Anzel Không chắc chắn ý của bạn về việc biết các kiểu dữ liệu mong muốn từ các mục POST. Trong định nghĩa mô hình, tôi có 45 thuộc tính của một vài kiểu khác nhau; vì tôi không lặp lại bản đồ giữa tên và loại thuộc tính ở bất kỳ đâu nhưng vẫn biết liệu giá trị như "Đúng" hay "5" cần được hiểu là bool, string hoặc int . –
Tôi hiểu những gì bạn đang cố gắng làm, nhưng vì dữ liệu bạn sẽ chuyển đổi là dữ liệu GET/POST, bạn có thể xác định hàm chuyển đổi để ánh xạ cặp khóa/giá trị ... – Anzel