Câu hỏi của tôi là, cách tốt nhất để tạo một thực thể mô hình mới là gì và sau đó đọc nó ngay sau đó. Ví dụ,Làm cách nào để tạo một thực thể mô hình mới, sau đó đọc nó ngay sau đó?
class LeftModel(ndb.Model):
name = ndb.StringProperty(default = "John")
date = ndb.DateTimeProperty(auto_now_add=True)
class RightModel(ndb.Model):
left_model = ndb.KeyProperty(kind=LeftModel)
interesting_fact = ndb.StringProperty(default = "Nothing")
def do_this(self):
# Create a new model entity
new_left = LeftModel()
new_left.name = "George"
new_left.put()
# Retrieve the entity just created
current_left = LeftModel.query().filter(LeftModel.name == "George").get()
# Create a new entity which references the entity just created and retrieved
new_right = RightModel()
new_right.left_model = current_left.key
new_right.interesting_fact = "Something"
new_right.put()
này khá thường xuyên ném một ngoại lệ như:
AttributeError: 'NoneType' object has no attribute 'key'
Tức là việc truy xuất thực thể LeftModel mới không thành công. Tôi đã phải đối mặt với vấn đề này một vài lần với appengine và giải pháp của tôi luôn luôn là một chút hacky. Thông thường tôi chỉ cần đặt tất cả mọi thứ trong một thử ngoại trừ hoặc một vòng lặp while cho đến khi thực thể được truy xuất thành công. Làm thế nào tôi có thể đảm bảo rằng thực thể mô hình luôn được truy xuất mà không phải chạy các rủi ro của vòng lặp vô hạn (trong trường hợp vòng lặp while) hoặc làm rối tung mã của tôi (trong trường hợp thử các câu lệnh ngoại trừ)?
chỉ cần đặt khóa cho LeftModel khi tạo thay vì sử dụng khóa được tạo tự động. –
+1 vấn đề được nêu rõ – msw