Методы наборов записей

Содержание

Базовые методы наборов записей

Как и в предыдущих статья для полного понимания необходимо внимательно изучать документацию. Здесь я приведу лишь основные названия методов и описание, которое дополнит описание из документации:

Метод 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. Для этого зайдите в одну из трех существующих записей. Вот какой результат у вас должен появиться в редакторе кода и в браузере:

Создаем новую запись

После того, как вы добавили вышеуказанный код в функцию, как показано на картинке, не забудьте перезапустить систему. Затем проделайте следующее:

Результат отработки функции

  1. Нажимаем на кнопку START FUNCTION
  2. У нас запускается функция с именем start_function
  3. Мы можем видеть что у нас сначала вывелся рекордсет который находился в self, а потом мы вывели в консоль значение переменной new_recordset и мы видим что система присвоила ему идентификатор 4
  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:

Обновляем текущую запись

После того, как вы добавили вышеуказанный код в функцию, как показано на картинке, не забудьте перезапустить систему. Затем проделайте следующее:

Результат обновлений полей

  1. Нажимаем на кнопку START FUNCTION
  2. У нас запускается измененная нами функция с именем start_function
  3. В консоль мы выводим новые значения полей
  4. Эти новые значения полей мы можем видеть в интерфейсе текущей записи
  5. И эти же изменения мы можем увидеть в виде списка, когда перейдем туда или обновим страницу

Более того, если нам надо изменить одно поле, то мы можем вместо вызова метода write использовать присвоение:

self.name = "record_005"

Т.е. это будет эквивалентно

self.write({
    "name": "record_005"
})

Если вам надо изменить значение одного поля, то можно спокойно использовать присвоение, а вот если вам надо надо изменить значение нескольких полей, то тут лучше использовать метод write

  • 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: Пишем функцию поиска

После того, как вы добавили вышеуказанный код в функцию, как показано на картинке, не забудьте перезапустить систему. Затем проделайте следующее:

Ищем

  1. Нажимаем на кнопку START FUNCTION
  2. У нас запускается измененная нами функция с именем start_function
  3. В консоль мы выводим найденный рекордсет, как мы видим, мы получили рекордсет из двух записей с ID равным 2 и 3

Метод search не влияет на данные, он нужен для поиска записей, с которыми мы хотим проделать какие либо манипуляции.

Это три самых часто используемых штатных метода, остальные вы можете изучить из документации

Обсуждение

Обсудить, указать на ошибки и опечатки можно здесь