Я делаю простую программу о клиентах, продуктах и проектах.Как получить имя_сети без наличия и экземпляра ссылочного объекта?
Поскольку они связаны друг с другом каким-то образом, когда я удаляю одну сущность, другая сущность другого рода может дать ошибку.
Вот что у меня есть:
-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 «доступно»?
EDIT: Я выяснил, какова была ошибка. Поскольку у меня есть оба класса в разных .py-файлах, кажется, что GAE загружает объекты в хранилище данных в тот же момент, когда он «проходит» файл, содержащий эту модель. Поэтому, если я выполняю программу и никогда не использую или не импортирую этот файл, хранилище данных не обновляется до тех пор. Теперь то, что я делаю:
from draft.py import Draft
внутри де «deleteCustomer) (» функция, и она, наконец, работает нормально, но я получаю ужасный «предупреждение не используется» из-за этого.
Есть ли другой способ, я могу это исправить?