[ppa-qps-devel] Explisitly sorting items in streams with order_num
Brought to you by:
ods
From: Denis S. O. <od...@st...> - 2003-06-30 13:44:50
|
Такая возможность у нас настолько часто используется, что пора ее вносить в QPS. Сортируемые потоки бывают 2-х типов: 1) выбираемые из одной таблицы (в том числе виртуальные с отношение 1 ко многим) 2) выбираемые из двух таблиц - виртуальные с отношением много ко многим. С первыми все все просто - нужно только для каждого потока знать сортировочное поле и иметь метод, который устанавливает это поле (метод нужен, так как часто после сортировки нужно еще что-то пометить для обновления). Со вторыми сложнее. Живой пример: (из fieldDescriptions.py одного сайта) itemFieldsOrder['docs_stories NATURAL JOIN docs'] = itemFieldsOrder['docs'] itemFields['docs_stories NATURAL JOIN docs'] = itemFields['docs'] В этом случае в allItemFields даже нет сортировочного поля. Более того, даже если оно там будет (я скопирую itemFields[Order] и добавлю туда поле), ему нельзя ставить права на редактирование, так как при соотношении много ко многим назначение поля внутри документа теряется. Делать отдельный класс типа LinkedStream общего назначения неудобно, так как для него придется применять множественное наследование с ручным разрешением конфликтов. Засорять базовый класс (Stream) тоже не очень-то хочется. В общем типичные симптомы болезни, при которой рекомендуется заменить наследование агрегированием, только непонятно что куда выносить. P.S. Решив эти проблемы, дальше все должно пойти как по маслу. Достаточно сделать новый метод Edit.do_reorderItems(), добавить метод Stream.reorderItem(), завести новый пермишен 's' и немного поправить шаблоны. -- Denis S. Otkidach http://www.python.ru/ [ru] |