# Общая часть
from Products.PythonScripts.standard import html_quote
from Products.CMFCore.utils import getToolByName
request = container.REQUEST
RESPONSE = request.RESPONSE
urltool = getToolByName(context, "portal_url")
portal = urltool.getPortalObject()
catalogtool = getToolByName(context, "portal_catalog")
lcurses = [i.getObject() for i in catalogtool.searchResults(portal_type = 'Tema')]
refCatalog = getToolByName(portal, 'reference_catalog')
uid_catalog=getToolByName(portal, 'uid_catalog')
#Пример 1
for item in lcurses:
refs = refCatalog.getReferences(item, 'content_source')
print item.title_or_id()+'********************'
for i in refs:
print i.targetUID, i.sourceUID, i.relationship
print uid_catalog(UID=i.targetUID), uid_catalog(UID=i.sourceUID)
a=[k.getObject().getId() for k in uid_catalog(UID=i.targetUID)][0]
b=[k.getObject().getId() for k in uid_catalog(UID=i.sourceUID)][0]
print a, b
print "##############################"
#Пример 2
for i in refs:
print i.targetUID, i.sourceUID, i.relationship
print refCatalog.lookupObject(i.targetUID), refCatalog.lookupObject(i.sourceUID)
a=refCatalog.lookupObject(i.targetUID)
b=refCatalog.lookupObject(i.sourceUID)
print a.getId(), b.getId()
return printed
каталог 'reference_catalog' возвращает объекты со свойствами:
sourceUID -UID объекта -источника связи
targetUID -UID связанного объекта,
relation - имя связи
метод getReferences(sourceUID, relation, targetUID) позволяет получать поднаборы связей, настраивая параметры метода.
Поскольку возвращаться будут UID объектов, то для получения Id нужно использовать или каталог 'uid_catalog' (1 пример), или сам каталог 'reference_catalog'(2 пример). В примере приведен код для объектов типа Thema и LearnObject, связанных между собой связью 'content_source'.
Если у объекта есть поле типа
ReferenceField(
name='source',
widget=ReferenceBrowserWidget(
label='Source',
label_msgid='LearnCurse_label_source',
i18n_domain='LearnCurse',
),
allowed_types=('LearnObject','Document','File'),
multiValued=1,
relationship='content_source',
),
то список связанных этим отношением объектов можно получить как self.getИмя_поля. В данном примере self.getSource() - если в классе, или context.getSource() в классе вида и в виде.
Подписаться на:
Комментарии к сообщению (Atom)
Всероссийский конкурс научно-технологических проектов страница конкурса https://dm-centre.ru/sirius-konkurs-projectov Цель конкурс...
-
PyKnow - библиотека Python для разработки экспертных систем, реализующая подход CLIPS . Реализует продукционный подход к построению экспе...
-
Чем заняться после работы: языки и среды программирования для самых маленьких Тест: насколько хорошо вы разбираетесь в Python? Подборка ...
-
Научно-практическая конференция проходит в три этапа: на школьном, городском и областном уровне для учащихся 5-11 классов. На втором этап...
Вопрос: С чего следует начать изучение системы Plone чтобы понять о чем речь в этом "блоге"?
ОтветитьУдалитьПредвидя ответ, второй вопрос: Почему же тогда сий "блог" (если это можно назвать блогом) пострен столь неграмотно (неграмотностью в данном контексте автор подразумевает отсутствие структуры информации)?
1. Начать стоит c установкb Plone, знакомства с интерфейсом и создания простых сайтов.
ОтветитьУдалить2. Следущий этап - изучения языка программирования Python и использования материалов с www.plone.org и других подобных сайтов.
3. Блог создавался как место общения преподавателя и студентов. Вопросы возникают у студентов без всякой системы, ответы соответствуют вопросам.
Почему бы тогда не составить хороший информационный контент, поэтапный, чтобы у студентов возникало меньше вопросов? Насколько понимаю у Вас имеются необходимые для этого материалы.
ОтветитьУдалитьА большим плюсом станет наличие каких-нибудь практических заданий с сортировкой по уровню сложности.
Можно ассоциировать данное предложение с квестом (интересно, понятно, со смыслом, ну и конечно - результат).
Также можно использовать тестовый ресурс содержащий ошибки, либо требующий "доведения до ума" как домашнее задание для учащегося (естественно с разделением системы прав).
Ну это так, предложение из личных предпочтений.
Это следует воспринимать как заказ на учебник? Если Вы готовы его оплатить - то я согласен создать такое произведение. Если Вы так хорошо знаете как это делать , то почему бы не сделать это лично? Я пока решил остановиться на тех двух книгах, которые я написал по данной тематике.
ОтветитьУдалитьЭто следует воспринимать как рекомендацию, пожелание для повышения отдачи от учащихся и интерес к развитию проекта. Если в Вашей голове все сводится только к отсосу бабла, то результатов в такой работе не достичь.
ОтветитьУдалитьЯ заинтересован веб-технологиями, потому ожидал от курса большей пользы. Был готов помочь в развитии проекта (пусть не деньгами, а делом, и технической стороной вопроса).
Весьма огорчен таким отношением к любимому делу (если оно для Вас таковым являлось хоть однажды).
1. Не стои хамить, не зная было ли получено какое-либо бабло.
ОтветитьУдалить2. Не все делается на альтруизме, исходя из каких соображений я должен поступать как Вы мне советуете?
3. Это мой личный блог, а не корпоративный и не сайт проекта.
4. Желающий помочь не скрывает своего имени.
5. Замечание о курсе весьма интересно. Если Вы один из моих студентов, то для них я всегда открыт и адреса моих контактов известны. Если нет, то почему внутренние материалы университета я должен отдавать кому-либо?
6. Об отношении к любимому делу - элементарный поиск по сети покажет МОЕ отношение и результаты.