Вопросы по разработке

237 views
Skip to first unread message

Minotavr_x86

unread,
Feb 1, 2012, 3:44:55 AM2/1/12
to tryton-ru
Как при сохранении записи пометить поле красным и не сохранять запись?
Вот до этого я дошел
def write(self, ids, vals):
if какое то условие :
return super(Anketa, self).write(ids, vals)
else:
Что делать если Данные не верны?

Dmitry Klimanov

unread,
Feb 1, 2012, 4:45:57 AM2/1/12
to tryton-ru
там есть проверка данных при сохранении
Вот кусок кода

def __init__(self):
super(Move, self).__init__()
Это регистрация проверок [Функция проверка, Метка сообщения при
ошибке]

self._constraints += [
('check_centralisation', 'period_centralized_journal'),
('check_company', 'company_in_move'),
('check_date', 'date_outside_period'),
]
Это разрешения вызова функций для удаленных клиентов. (По умолчанию
выполнение запрещено)
self._rpc.update({
'button_post': True,
'button_draft': True,
})
self._order.insert(0, ('date', 'DESC'))
self._order.insert(1, ('reference', 'DESC'))

Здесь хранится описание сообщения об ошибках

self._error_messages.update({
'del_posted_move': 'You can not delete posted moves!',
'post_empty_move': 'You can not post an empty move!',
'post_unbalanced_move': 'You can not post an unbalanced
move!',
'modify_posted_move': 'You can not modify a posted move '
\
'in this journal!',
'period_centralized_journal': 'You can not create more
than ' \
'one move per period\n' \

Это пример функций проверки которые зарегистрированны при
инициализации объекта

def check_company(self, ids):
for move in self.browse(ids):
company_id = -1
for line in move.lines:
if company_id < 0:
company_id = line.account.company.id
if line.account.company.id != company_id:
return False
return True

def check_date(self, ids):
for move in self.browse(ids):
if move.date < move.period.start_date:
return False
if move.date > move.period.end_date:
return False
return True

Поизучай код родного модуля account хотя бы файл move.py - Это
операционный журнал финансового учета западного образца.

Dmitry Klimanov

unread,
Feb 1, 2012, 4:51:08 AM2/1/12
to tryton-ru
Извини забыл объяснить

Имя функции проверки должно называть вот так -> check_Имя поля
и возвращать True или False

Dmitry Klimanov

unread,
Feb 1, 2012, 6:12:58 AM2/1/12
to tryton-ru
есть еще специальные функции

default_(имя поля) - Заполнение по умолчанию поля в новой форме
Возвращает значение поля или False

on_change_(имя поля) - Вызов при изменении поля для проверки группы
полей
Возвращает значение поля или False

on_change_with(имя поля) - Вызов при изменении поля обработки группы
полей
Возвращает значение поля или False

Здесь описание типов полей и их свойств
http://doc.tryton.org/2.2/trytond/doc/ref/models/fields.html#ref-models-fields

Dmitry Klimanov

unread,
Feb 1, 2012, 6:15:22 AM2/1/12
to tryton-ru
on_change_(имя поля) - Вызов при изменении поля для проверки группы
полей
Возвращает словарь типа {'имя поля': значение, и т.д.} или {}
Reply all
Reply to author
Forward
0 new messages