我在做一个关于客户,产品和草稿的简单程序。如何获取没有引用对象的实例的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()”函数,它的最后工作正常,但我得到一个可怕的“警告不使用”的,因为这样。
有没有其他办法可以解决这个问题?