provide display rendering for relation property with link (like for relation set)

This commit is contained in:
Helmut Merz 2011-11-14 13:46:30 +01:00
parent 153f0ee0e7
commit 907e9c4da8
4 changed files with 16 additions and 6 deletions

View file

@ -158,7 +158,7 @@ class Search(BaseView):
adObj = adapted(o, self.languageInfo)
if filterMethod is not None and not filterMethod(adObj):
continue
name = self.getRowName(adObj)
name = self.getRowName(adObj) or u''
if title and title.endswith('*'):
title = title[:-1]
sort = ((title and name.startswith(title) and '0' or '1')

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
# Copyright (c) 2011 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -18,8 +18,6 @@
"""
Specialized field definitions.
$Id$
"""
from zope.component import adapts
@ -59,7 +57,8 @@ class Relation(Field):
__typeInfo__ = ('relation',
FieldType('relation', 'relation',
u'A field representing a related object.',
instanceName='relation'))
instanceName='relation',
displayRenderer='display_relation'))
def __init__(self, *args, **kw):
self.target_types = kw.pop('target_types', ())

View file

@ -93,9 +93,14 @@ class RelationFieldInstance(FieldInstance, BaseRelationFieldInstance):
def display(self, value):
if value:
return value.title
nodeView = self.clientInstance.view.nodeView
return dict(url=nodeView.getUrlForTarget(baseObject(value)),
label=value.title)
return u''
def unmarshall(self, value):
return util.getObjectForUid(value)
def getRenderer(self, name):
return relation_macros.macros[name]

View file

@ -12,6 +12,12 @@
</metal:display>
<metal:display define-macro="display_relation">
<a tal:attributes="href value/url"
tal:content="value/label"></a>
</metal:display>
<metal:input define-macro="input_relationset"
tal:define="fieldInstance field/getFieldInstance;
types fieldInstance/typesParams">