доступ к полям классов

7 messages Options
Embed this post
Permalink
ildus

доступ к полям классов

Reply Threaded More More options
Print post
Permalink
Есть два класса (PoiTracker - класс трекера и PoiIssue - класс ошибки)
PoiTracker отображает список из элементов PoiIssue, а именно создает
таблицы с полями из PoiIssue (ну там имя, описание итп). Шаблон
отображающий трекер - poi_tracker_view.pt, шаблон отображающий ошибку
- poi_issue_view.
Проблема такая. Добавил я еще одно поле в схему PoiIssue:

IntegerField(
        name='rating',
        default=0,
        widget=IntegerWidget(
            label='Rating',
        ),
        required=True,
    ),

и метод для его чтения:

def Rating(self):
        try:
            return str(self.rating)
        except:
            return '0' #так извращенно потому что у старых объектов
это поля пока нет

ну так вот.  если отображать это поле в poi_issue_view
(tal:content="here/Rating") все отображается отлично, при этом в
poi_tracker_view это поле не отображается и выводится ошибка KeyError:

Тип ошибки
KeyError
Значение ошибки
'Rating',

Поле выводится куском шаблона poi_tracker_view (с сокращениями):
<tal:issues repeat="item issues">
               <tr tal:define="oddrow repeat/item/odd"
                   tal:attributes="class python:test(oddrow, 'even',
'odd')">
                   <td tal:content="item/getId">
                   </td>
                   <td>
                       <a tal:attributes="href  item/getURL;
                                          title item/Description;"
                          tal:content="item/Title" />
                   </td>
                   <td tal:condition="here/isUsingReleases">
                   <td tal:content="item/getSeverity" />
              <td tal:content="item/Rating" /> #здесь выдает ошибку

               </tr>
           </tal:issues>
где issues это список полученный с помощью portal_catalog.
В чем может быть ошибка?
--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

besja

Re: доступ к полям классов

Reply Threaded More More options
Print post
Permalink
При поиске по portal_catalog вы получаете в результате набор как бы представления элементов с метаданными (смотри в ZMI вкладку metadata и index) - Products.ZCatalog.Catalog.mybrains. И у них другие методы и свойства. Чтобы получить сам объект, нужно вызвать getObject(). То есть как то так:
<tal:issues repeat="item issues">
<tal:issue tal:define="obj python:item.getObject()">
<tr tal:define="oddrow repeat/item/odd"
tal:attributes="class python:test(oddrow, 'even',
'odd')">
<td tal:content="item/getId">
</td>
<td>
<a tal:attributes="href item/getURL;
title item/Description;"
tal:content="item/Title" />
</td>
<td tal:condition="here/isUsingReleases">
<td tal:content="item/getSeverity" />
<td tal:content="obj/Rating" /> #здесь выдает ошибку

</tr>
</tal:issue>
</tal:issues>

Либо добавить новый индекс в портал каталог типа FieldIndex и назвать его Rating - что лучше, так как будет по идеи быстрее работать)

Сорри за терминологию - в теории не сильна)

06.03.09, 14:53, "ildus" <[hidden email]>:

> Есть два класса (PoiTracker - класс трекера и PoiIssue - класс ошибки)
PoiTracker отображает список из элементов PoiIssue, а именно создает
таблицы с полями из PoiIssue (ну там имя, описание итп). Шаблон
отображающий трекер - poi_tracker_view.pt, шаблон отображающий ошибку
- poi_issue_view.
Проблема такая. Добавил я еще одно поле в схему PoiIssue:

IntegerField(
name='rating',
default=0,
widget=IntegerWidget(
label='Rating',
),
required=True,
),

и метод для его чтения:

def Rating(self):
try:
return str(self.rating)
except:
return '0' #так извращенно потому что у старых объектов
это поля пока нет

ну так вот. если отображать это поле в poi_issue_view
(tal:content="here/Rating") все отображается отлично, при этом в
poi_tracker_view это поле не отображается и выводится ошибка KeyError:

Тип ошибки
KeyError
Значение ошибки
'Rating',

Поле выводится куском шаблона poi_tracker_view (с сокращениями):
<tal:issues repeat="item issues">
<tr tal:define="oddrow repeat/item/odd"
tal:attributes="class python:test(oddrow, 'even',
'odd')">
<td tal:content="item/getId">
</td>
<td>
<a tal:attributes="href item/getURL;
title item/Description;"
tal:content="item/Title" />
</td>
<td tal:condition="here/isUsingReleases">
<td tal:content="item/getSeverity" />
<td tal:content="item/Rating" /> #здесь выдает ошибку

</tr>
</tal:issues>
где issues это список полученный с помощью portal_catalog.
В чем может быть ошибка?


--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

ildus

Re: доступ к полям классов

Reply Threaded More More options
Print post
Permalink
Спасибо большое ) Многое понял ) Сделал просто через getObject. А
можете если не трудно поподробнее описать добавление индекса или
прислать кусок кода, который делает это?

On 6 мар, 18:47, Бессарабова Ирина <[hidden email]> wrote:

> При поиске по portal_catalog вы получаете в результате набор как бы представления элементов с метаданными (смотри в ZMI вкладку metadata и index) - Products.ZCatalog.Catalog.mybrains. И у них другие методы и свойства. Чтобы получить сам объект, нужно вызвать getObject(). То есть как то так:
> <tal:issues repeat="item issues"><tal:issue tal:define="obj python:item.getObject()">
> <tr tal:define="oddrow repeat/item/odd"
> tal:attributes="class python:test(oddrow, 'even',
> 'odd')">
> <td tal:content="item/getId">
> </td>
> <td>
> <a tal:attributes="href item/getURL;
> title item/Description;"
> tal:content="item/Title" />
> </td>
> <td tal:condition="here/isUsingReleases">
> <td tal:content="item/getSeverity" />
> <td tal:content="obj/Rating"/> #здесь выдает ошибку
> </tr></tal:issue>
> </tal:issues>
> Либо добавить новый индекс в портал каталог типа FieldIndex и назвать его Rating - что лучше, так как будет по идеи быстрее работать)
> Сорри за терминологию - в теории не сильна)
--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Mikhail Kashkin-2

Re: доступ к полям классов

Reply Threaded More More options
Print post
Permalink
Добавляется через web-интерфейс в portal_catalog. Только добавлять все подряд плохая практика. Надо добавлять только те поля по которым осуществляется поиск.

2009/3/10 ildus <[hidden email]>
Спасибо большое ) Многое понял ) Сделал просто через getObject. А
можете если не трудно поподробнее описать добавление индекса или
прислать кусок кода, который делает это?




--
Mikhail Kashkin
Devcult.ru


--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

ildus

Re: доступ к полям классов

Reply Threaded More More options
Print post
Permalink
а почему новые поля не добавляются как индекс при переустановке
продукта?

On 10 мар, 22:02, Mikhail Kashkin <[hidden email]> wrote:
> Добавляется через web-интерфейс в portal_catalog. Только добавлять все
> подряд плохая практика. Надо добавлять только те поля по которым
> осуществляется поиск.
--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Юрий Поляков

Re: доступ к полям классов

Reply Threaded More More options
Print post
Permalink
Потому что не по всем полям нужен поиск. Индекс - это для поиска.
Есть ещё метадата. Но она опять же не для всех полей нужна.

2009/3/11 ildus <[hidden email]>
а почему новые поля не добавляются как индекс при переустановке
продукта?

On 10 мар, 22:02, Mikhail Kashkin <[hidden email]> wrote:
> Добавляется через web-интерфейс в portal_catalog. Только добавлять все
> подряд плохая практика. Надо добавлять только те поля по которым
> осуществляется поиск.




--
 Юрий Поляков
   +7 (916) 806-00-55
   [hidden email]

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

besja

Re: доступ к полям классов

Reply Threaded More More options
Print post
Permalink
Кроме поиска индекс может использоваться еще для сортировки. И его можно определять через zcml в профиле, если у вас есть такая возможность.
11.03.09, 12:53, "Юрий Поляков" <[hidden email]>:
Потому что не по всем полям нужен поиск. Индекс - это для поиска.
Есть ещё метадата. Но она опять же не для всех полей нужна.

2009/3/11 ildus <[hidden email]>
а почему новые поля не добавляются как индекс при переустановке
продукта?

On 10 мар, 22:02, Mikhail Kashkin <[hidden email]> wrote:
> Добавляется через web-интерфейс в portal_catalog. Только добавлять все
> подряд плохая практика. Надо добавлять только те поля по которым
> осуществляется поиск.




--
Юрий Поляков
+7 (916) 806-00-55
[hidden email]



--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---