Методы наборов записей
Содержание
Базовые методы наборов записей
Как и в предыдущих статья для полного понимания необходимо внимательно изучать документацию. Здесь я приведу лишь основные названия методов и описание, которое дополнит описание из документации:
Метод create
self.create()
- метод который создает новый записи. Возвращает созданный рекордсет. Пример:
# Создадим список для новых значений
list_of_vals = []
# Создадим переменную типа словарь, с указанными значениями полей
values_for_new_recordset = {
"name": "record 004",
"field_one": 40,
"field_two": 0.4,
}
# Добавим в наш список указанную переменную со значениями
list_of_vals.append(values_for_new_recordset)
# Создадим новый рекордсет (т.е. новые записи в базе данных)
new_recordset = self.env["first.model"].create(list_of_vals)
# Выведем новый рекордсет в консоль
print("new_recordset", new_recordset)
Теперь давайте скопируем этот участок кода и вставим в функцию которая у нас вызывается по кнопке START FUNCTION
. Для этого зайдите в одну из трех существующих записей. Вот какой результат у вас должен появиться в редакторе кода и в браузере:
После того, как вы добавили вышеуказанный код в функцию, как показано на картинке, не забудьте перезапустить систему. Затем проделайте следующее:
- Нажимаем на кнопку
START FUNCTION
- У нас запускается функция с именем
start_function
- Мы можем видеть что у нас сначала вывелся рекордсет который находился в
self
, а потом мы вывели в консоль значение переменнойnew_recordset
и мы видим что система присвоила ему идентификатор 4 - В виде списка, мы теперь можем видеть новую запись со значениями указанными в переменной
values_for_new_recordset
Мы можем создавать сразу несколько записей одновременно, достаточно сформировать нужные значения, положить их в список и подать в метод create
в качестве аргумента
Метод write
self.write()
- метод который обновляет значения полей. Возвращает True или False. Пример:
# Создадим переменную, которая будет содержать в себе новые значения полей для
# уже существующей записи
new_values_for_current_recordset = {
"name": "record 005",
"field_one": 50,
"field_two": 0.5,
}
# Обновим значения полей новыми значениями
self.write(new_values_for_current_recordset)
# Выведем обновленные значения полей текущего измененного рекордсета из одной записи
print("self", self)
print("name", self.name)
print("field_one", self.field_one)
print("field_two", self.field_two)
Теперь давайте удалим из нашей функции ранее внесенные изменения для метода create
и добавим новые для изучения работы метода write
:
После того, как вы добавили вышеуказанный код в функцию, как показано на картинке, не забудьте перезапустить систему. Затем проделайте следующее:
- Нажимаем на кнопку
START FUNCTION
- У нас запускается измененная нами функция с именем
start_function
- В консоль мы выводим новые значения полей
- Эти новые значения полей мы можем видеть в интерфейсе текущей записи
- И эти же изменения мы можем увидеть в виде списка, когда перейдем туда или обновим страницу
Более того, если нам надо изменить одно поле, то мы можем вместо вызова метода write
использовать присвоение:
self.name = "record_005"
Т.е. это будет эквивалентно
self.write({
"name": "record_005"
})
Если вам надо изменить значение одного поля, то можно спокойно использовать присвоение, а вот если вам надо надо изменить значение нескольких полей, то тут лучше использовать метод write
Метод search
self.search()
- метод который осуществляет поиск записей в указанной модели по заданным критериям. Можно считать условным аналогом командыSELECT
вSQL
. Возвращает рекордсет найденных записей, если ничего не найдено, то возвращает пустой рекордсет. В качестве первого аргумента использует домен поиска Пример использования:
# Создадим новый рекордсет, который будет результатом поиска в нашей модели по заданному домену
# В текущей ситуации мы хотим найти все записи имена которых являются "record_002" и "record_003"
selected_records = self.env["first.model"].search(
[
("name", "in", ["record 002", "record 003"])
]
)
print("selected_records", selected_records)
Теперь давайте удалим из нашей функции ранее внесенные изменения для метода write
и добавим новые для изучения работы метода search
:
После того, как вы добавили вышеуказанный код в функцию, как показано на картинке, не забудьте перезапустить систему. Затем проделайте следующее:
- Нажимаем на кнопку
START FUNCTION
- У нас запускается измененная нами функция с именем
start_function
- В консоль мы выводим найденный рекордсет, как мы видим, мы получили рекордсет из двух записей с ID равным 2 и 3
Метод search
не влияет на данные, он нужен для поиска записей, с которыми мы хотим проделать какие либо манипуляции.
Это три самых часто используемых штатных метода, остальные вы можете изучить из документации
Обсуждение
Обсудить, указать на ошибки и опечатки можно здесь