Как получить записи, имеющие одинаковое значение имени в openerp (или в том же другом поле)?OpenERP: получить запись с тем же именем
ответ
Решение, связанное с использованием ручного SQL-запроса для группы по name
, как предлагает Ruchir, возможно, является самым простым, но немного низким уровнем. Вы также можете сделать это, используя метод API read_group()
, который выполняет аналогичный запрос GROUP BY
, но не обходит механизмы управления доступом и модельную бизнес-логику.
read_group
метод принимает поиска домена (аналогично search()
), список полей для чтения (аналогично read()
) и список полей для группировки. Этот метод документирован в OpenERP API. Он возвращает упорядоченный список словарей сгруппированными данными и некоторыми дополнительными значениями, включая количество записей в каждой группе, хранящихся в ключе с именем <grouped_field>_count
, который вы можете использовать для поиска дубликатов.
Например, если вы посмотрите на наличие дубликатов name
значений, без какого-либо другого критерия поиска:
def duplicate_names(self, cr, uid, context=None):
# Note: context not propagated for brevity of example
groups = self.read_group(cr, uid, [], ['name'], ['name'])
duplicate_names = [g['name'] for g in groups if g['name_count'] > 1]
print "Duplicates names:", duplicate_names
if duplicate_names:
# It's easy to find out the IDs of duplicate records for each name,
# here is for the first one
duplicate_ids = self.search(cr, uid, [('name', '=', duplicate_names[0])])
print "Duplicate IDs for %r: %s" % (duplicate_names[0], duplicate_ids)
Вы должны сначала прочитать документ первый: http://doc.openerp.com/v6.0/developer/2_5_Objects_Fields_Methods/methods.html
Для этого вопроса вам нужно сначала «поиск», то есть «Обзор» (или «читать»), например:
obj = self.pool.get('your.obj.name')
ids = obj.search(cr, uid, [('name','=',your_value)], context=context)
records = obj.browse(cr, uid, ids, context=context)
Если у вас есть определенное значение для поля «имя» для поиска, то область для поиска является
domain = [('name', '=', your_value)]
Если у вас есть список значений для поиска, то
domain = [('name', 'in', list_of_values)]
Если вы хотите найти «имя» поля с аналогичным значением, то
domain = [('name','ilike',your_value)]
Теперь вы можете искать
our_pool = self.pool.get('your.obj.name')
ids = our_pool.search(cr, uid, domain, context=context)
Теперь вы можете просматривать идентификаторы, которые мы получаем
our_objs = our_pool.browse(cr, uid, ids, context)
Вопрос заключался в том, как найти записи, которые имеют повторяющиеся значения в каком-либо поле, например имя. –
Вы можете найти дубликаты записей с прямым SQL-запрос в базе данных. В качестве примера, это то, как вы можете найти повторяющиеся имена контактных адресов:
cr.execute("""
SELECT name, id, partner_id FROM res_partner_address
WHERE name in (SELECT name
FROM res_partner_address
GROUP BY name
HAVING (COUNT(name) > 1))""")
print cr.dictfetchall()
Вместо cr.dictfetchall()
вы можете использовать cr.fetchall()
, чтобы получить результаты в виде списка кортежей, а не dicts.
- 1. Получить набор методов с тем же именем
- 2. Получить все атрибуты с тем же именем
- 3. Классы с тем же именем
- 4. переместить два разных типа файлов с тем же именем в новую папку с тем же именем
- 5. Класс с тем же именем уже существует
- 6. Курсор JOIN с тем же именем столбца
- 7. Два поля с тем же именем
- 8. доступа внешняя структура с тем же именем
- 9. Получить несколько XML-детей с тем же именем с PHP
- 10. Получить файлы с ftp с тем же именем
- 11. получить все атрибуты из узлов с тем же именем
- 12. Задачи с сельдереем с тем же именем
- 13. ключей Карты с тем же именем
- 14. Сериализация форма - вход с тем же именем
- 15. Вызвать функцию с тем же именем, что и другая функция с тем же именем пакета
- 16. Опубликовать несколько полей с тем же именем
- 17. Переключить с тем же именем класса
- 18. как идентифицировать объект с тем же именем с именем property
- 19. Как получить все атрибуты с тем же именем?
- 20. Получить значения из отдельных элементов с тем же именем
- 21. Как получить элемент списка с тем же именем?
- 22. XSLT - получить значение всех узлов с тем же именем
- 23. Селен получить список элементов текста с тем же именем класса
- 24. XSLT получить содержание различного ребенка с тем же именем узла
- 25. Получить Следующий элемент Jsoup с тем же именем Android
- 26. Получить содержимое нескольких тегов div с тем же именем класса
- 27. Javascript получить все теги с тем же именем
- 28. Linq для XML Получить следующий узел с тем же именем
- 29. Получить флажки (с тем же именем), как массив
- 30. Как получить правильный xpath с тем же именем? Scrapy
Вопрос заключался в том, чтобы найти записи, которые имеют повторяющиеся значения в некотором поле, например, имя. –