Я работаю с Web2Py. Я пытаюсь включить текстовое поле, которое, как представляется, не определено нигде, но каким-то образом появляется на веб-странице.Python не интерпретировать True - объект «NoneType» не поддерживает назначение объекта
в любом случае.
Если пользователь, входящий в систему, принадлежит определенной группе, текстовое поле включено и пользователь может писать в текстовое поле. Если они не являются членами группы, текстовое поле отключено - они могут читать ранее, но не могут вводить его.
Код, который, кажется, затрагивает включенном состоянии этот
if __userCanPerformStep(step) and not flow_completed:
flow_step_forms[step.name].element('textarea')['_rows'] = 5
__userCanPerformStep (этап) определяется как
def __userCanPerformStep(step_row):
if auth.user.id in step_row.target_users:
return True
for group_id in step_row.target_groups:
if db((db.auth_membership.user_id == auth.user.id) & (db.auth_membership.group_id == group_id)).count() > 0:
return True
if auth.has_group_membership("systemadmin"):
return True
return False
has_group_membership определяется как
def has_group_membership(self, groupname):
if self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).count() > 0:
group_id = self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).select().first().id
return self.has_membership(group_id)
return False
Поскольку __userCanPerformStep используется во многих местах, я создал новый метод как таковой:
def canAddComment(step_row):
if auth.has_group_membership_or(["groupA", "groupB", "groupC"]):
return False
if auth.user.id in step_row.target_users:
return False
return False
и has_group_membership_or определяется как
def has_group_membership_or(self, groupnames):
if self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role.belongs(groupnames))).count() > 0:
for groupname in groupnames:
group = self.db((self.db.auth_group.id > 0) & (self.db.auth_group.role==groupname)).select().first()
if group and self.has_membership(group.id):
return True
return False
, когда я теперь вызвать функцию как часть IF такой как:
if ((canAddComment(step)) and (not flow_completed)):
flow_step_forms[step.name].element('textarea')['_rows'] = 5
и каждый раз, когда пользователь принадлежит к одной из групп A, B или C. Я получаю следующее сообщение об ошибке:
объект «NoneType» не поддерживает назначение элемента
любые намеки ?? SIDE NOTE Я также заставил функцию немедленно вернуть False, и я не получаю никаких ошибок. Если я заставлю Истину; Я получаю ошибки. форсирование выполняется просто, если первая строка метода равна return True
Вопрос: как я могу заставить python интерпретировать мою функцию, вызываемую, чтобы принять значение True? что я пропускаю?
UPDATE Полный отслеживающий является
Опубликовать полную трассировку стека. он скажет вам, какой объект «Нет», а где «Нет». – TemporalWolf