0

Я создаю приложение в Google App Engine с бэкэндом Cloud Datastore.ТипError: __init __() получил неожиданный аргумент ключевого слова 'parent'

Моя модель Базовый класс

из google.appengine.ext импорта ОПРС

class CFCModel(ndb.Model): 
    """ 
    Base model from which we can inherit other models. Test 
    """ 
    created_date = ndb.DateTimeProperty(auto_now=True) 
    modified_date = ndb.DateTimeProperty(auto_now_add=True) 

Класс модель наследует это

class PraiseReport(CFCModel): 
    def __init__(self): 
     self.username = ndb.StringProperty(repeated=True) 
     self.report = ndb.StringProperty(required=True) 
     super(PraiseReport, self).__init__() 

Я сейчас пытаюсь создать объект

key = PraiseReportRepository.get_praise_report_key() 
praise_report_model = PraiseReport(parent=key) 
praise_report_model.username = praise_report.username 
praise_report_model.report = praise_report.report 
praise_report_model.put() 

И я получаю следующее сообщение об ошибке

ERROR 2016-05-25 09:34:59,882 app.py:1423] Exception on /forms/add_praise_report [GET] 
Traceback (most recent call last): 
    File "/Users/vinay/App-Engine/CM-12/server/lib/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Users/vinay/App-Engine/CM-12/server/lib/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Users/vinay/App-Engine/CM-12/server/lib/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Users/vinay/App-Engine/CM-12/server/lib/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Users/vinay/App-Engine/CM-12/server/lib/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/vinay/App-Engine/CM-12/cfc/decorators/authentication.py", line 62, in authenticate_and_call_member 
    return func(*args, **kwargs) 
    File "/Users/vinay/App-Engine/CM-12/Routes/PraiseReportRoutes.py", line 34, in add_report 
    repo.add(report) 
    File "/Users/vinay/App-Engine/CM-12/cfc/data/PraiseReportRepository.py", line 12, in add 
    praise_report_model = PraiseReport(parent=key) 
TypeError: __init__() got an unexpected keyword argument 'parent' 
+0

Как вы можете видеть, в этих классах нет переменной «parent». Итак, этот 'parent = key' даст вам ошибку –

+0

Итак, как установить это значение, учитывая, что базовый класс обладает таким свойством? –

+0

Похоже, вы путаете концепцию GAE 'parent' с супер-классом Python'. Я предлагаю прочитать о каждом, чтобы вы могли узнать, что такое различия. –

ответ

2

Здесь довольно много ошибок. Главное, что вы переопределили метод __init__, чтобы он не принимал никаких параметров, но затем вы пытаетесь называть его с параметрами. Очевидно, что ваш метод подкласса должен принимать те же параметры, что и базовый класс, и передавать эти параметры в вызов super - обычно это делается с помощью *args, **kwargs.

Однако, похоже, что вы не должны быть переопределены __init__. Единственный код, который у вас есть в этом переопределенном методе, определенно не принадлежит. Поля всегда должны быть определены на уровне класса; они просто не будут работать, если вы определите их внутри метода. Извлеките эти поля и полностью удалите этот метод.

class PraiseReport(CFCModel): 
    username = ndb.StringProperty(repeated=True) 
    report = ndb.StringProperty(required=True) 
Смежные вопросы