我在做一個關於客戶,產品和草稿的簡單程序。如何獲取沒有引用對象的實例的collection_name?
由於它們以某種方式相互引用,所以當我刪除某種實體時,另一種實體可能會發生錯誤。
這是我有:
-customer.py
class Customer(db.Model):
"""Defines the Customer entity or model."""
c_name = db.StringProperty(required=True)
c_address = db.StringProperty()
c_email = db.StringProperty() ...
-draft.py
class Draft(db.Model):
"""Defines the draft entity or model."""
d_customer = db.ReferenceProperty(customer.Customer,
collection_name='draft_set')
d_address = db.StringProperty()
d_country = db.StringProperty() ...
好了,現在我想要做的是檢查,如果客戶有什麼在刪除他之前引用他的草稿。 這是我使用的代碼:
def deleteCustomer(self, customer_key):
'''Deletes an existing Customer'''
# Get the customer by its key
customer = Customer.get(customer_key)
if customer.draft_set: # (or customer.draft_set.count > 0...)
customer.delete()
else:
do_something_else()
而現在,它涉及的問題。 如果我有一份之前由選定客戶創建的草稿,那麼完全沒有問題,而且它確實需要做。但是,如果我沒有創建任何給客戶參考,試圖刪除他的時候,它會顯示這個錯誤草案:
AttributeError: 'Customer' object has no attribute 'draft_set'
我在做什麼錯?是否需要始終創建包含客戶的草稿以使其具有collection_name屬性「可用」?
編輯:我發現錯誤是什麼。 因爲我在不同的.py文件中都有兩個類,所以GAE似乎在它「穿過」包含該模型的文件的同時將實體加載到數據存儲中。 因此,如果我正在執行該程序,並且從不使用或導入該文件,那麼直到此時纔會更新數據存儲。 現在我在做什麼是:
from draft.py import Draft
內德「deleteCustomer()」函數,它的最後工作正常,但我得到一個可怕的「警告不使用」的,因爲這樣。
有沒有其他辦法可以解決這個問題?