Đây là về ndb của Google App Engine. Theo quan sát của tôi, nếu tôi tạo một thực thể mà không cung cấp bất kỳ khóa nào, thực thể sẽ có một số nguyên, bắt đầu bằng 1 và được gia tăng, trong trường ID
như được hiển thị trong Trình xem Datastore. Tuy nhiên, nếu tôi tạo đối tượng bằng cách cung cấp một chuỗi làm id của nó, thực thể sẽ có một chuỗi trong trường Key Name
. Ví dụ:ndb của công cụ ứng dụng Google: sử dụng id hoặc tên khóa?
mẫu:
class Member(ndb.Model):
...
chương trình:
member1 = Member() # --> ID is 1, Key Name is None
member2 = Member(id='abc') # --> ID is empty, Key Name is 'abc'
Bên cạnh đó, trong file html, nếu tôi sử dụng
<input ... name="id" value={{member1.key.id}} ... />
như một tham số để trở về chương trình phía máy chủ (Python), không một trong hai câu lệnh sau đây sẽ làm việc cho thành viên1:
Member.get_by_id(self.request.get('id'))
member1 = Member.get_by_id(int(self.request.get('id')))
Tuy nhiên, html và chương trình mã sau:
<input ... name="id" value={{member2.key.id}} ... />
member2 = Member.get_by_id(self.request.get('id'))
sẽ làm việc cho member2.
Có vẻ như không có vấn đề gì với các thực thể được tạo bằng cách cung cấp cùng với id chuỗi (ví dụ: member2). Nhưng điều tương tự cũng không hiệu quả đối với member1. Câu hỏi của tôi: a) Các quan sát của tôi có đúng không? b) Làm cách nào để tìm nạp member1 bằng cách sử dụng get_by_id()
?
Bạn đã lấy tất cả các thành viên và kiểm tra phím của họ để bạn biết 1. rằng bạn có trong thực tế bằng văn bản member1 và member2? và –
2. phím nào bạn đã thực sự tạo ra –