2010-02-07 9 views
6

Sử dụng Google App Engine SDK và Python, tôi đang gặp phải sự cố: Tôi không thể truy cập thuộc tính ID của một thuộc tính thực thể nhất định. Các đặc tính duy nhất tôi có thể truy cập được đối tượng quy định trong lớp học mẫu của tôi, cộng với các tài sản quan trọng (xem câu trả lời dưới đây):Không thể truy cập thuộc tính ID từ một thực thể datastore

class Question(db.Model): 
    text = db.StringProperty() 
    answers = db.StringListProperty() 
    user = db.UserProperty() 
    datetime = db.DateTimeProperty() 

tôi có thể truy cập vào văn bản, câu trả lời, người dùng, datetime và tài sản chủ chốt tốt. Tuy nhiên, tôi không thể truy cập thuộc tính ID. Ví dụ, sau khi lấy tất cả các thực (sử dụng Question.all()):

# OK Within a template, this will return a string : 
{{ question.text }} 
# OK, this will return the entity key : 
{{ question.key }} 

# KO this will return nothing : 
{{ question.id }} 

Bất kỳ ý tưởng? Cảm ơn !

+0

khóa và id không thuộc tính của thực thể kho dữ liệu. key() là một phương thức instance và id() là một phương thức instance của khóa. {{entity.key.id}} chỉ hoạt động vì bit sau. sẽ được hiểu là một cuộc gọi phương thức khi thích hợp. – geoffspear

Trả lời

10

Theo documentation, không có phương pháp thể hiện id() được xác định cho Mô hình lớp con.

Thay vào đó hãy thử {{ question.key }}.

Cũng lưu ý rằng khoá không được tạo cho đến khi thực thể được lưu vào kho dữ liệu.


Edit: biết thêm dựa trên chỉnh sửa OP của:

Kể từ khi chúng tôi thực sự sau khi số ID, chúng ta có thể làm điều gì đó như thế này trong mẫu của chúng tôi:

{{ question.key.id }}

Lưu ý khác: bạn sẽ không bao giờ mong đợi các ID số tăng giá trị tương ứng với thứ tự tạo đối tượng. Trong thực tế, điều này thường - nhưng không phải luôn luôn - trường hợp.

+0

Thật vậy, {{question.key}} hoạt động tốt và trả về khóa được lưu trữ trong kho dữ liệu. Tôi nên kiểm tra kỹ! Tôi có thể chỉnh sửa bài đăng gốc của mình. Vì vậy, tôi đoán lấy ID là vấn đề duy nhất còn lại. – jbmusso

+0

cảm ơn các câu trả lời nhanh, giải quyết vấn đề của tôi một cách hoàn hảo! – jbmusso

+0

@Sorw: Bất cứ lúc nào. Chào mừng bạn đến với SO. – bernie

5

Tôi vừa tìm thấy giải pháp có thể (không đủ điều kiện, IMO). Sau khi truy vấn và lấy đơn vị, vòng lặp qua tất cả trong số họ và tự thêm các tham số id:

query = Question.all() 
questions = query.fetch(10) 

# Add ID property : 
for question in questions: 
    question.id = str(question.key().id()) 

Tôi không nghĩ rằng đó là hiệu quả CPU khôn ngoan, nhưng nó hoạt động như một sửa chữa nhanh chóng/bẩn.

+0

@Sorw: bạn không phải làm điều này. Xem câu trả lời đã chỉnh sửa của tôi. – bernie

+0

@Adam: hehe Tôi nghĩ cả hai chúng tôi đã tìm thấy một giải pháp có thể cùng một lúc, nhưng bạn sẽ đơn giản hơn rất nhiều! – jbmusso

+0

Không thích hợp, có thể, nhưng +1 cho bạn khi đến giải pháp. – bernie