顧客、製品、ドラフトに関する簡単なプログラムを実行しています。
それらは何らかの方法で相互に参照されているため、ある種類のエンティティを削除すると、別の種類の別のエンティティでエラーが発生する可能性があります。
ここに私が持っているものがあります:
-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()」関数内で、最終的には正常に機能していますが、そのため、恐ろしい「使用されていないという警告」が表示されます。
これを修正できる他の方法はありますか?