fixes for composer.schema to be usable for loops member registration

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2102 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-10-08 16:53:12 +00:00
parent 55e801431e
commit e8db37544f
6 changed files with 26 additions and 10 deletions

View file

@ -71,7 +71,7 @@ class Form(object):
@Lazy
def fields(self):
return self.schema.fields
return [f for f in self.schema.fields if not f.readonly]
@Lazy
def data(self):

View file

@ -83,7 +83,17 @@
tal:attributes="name name;
style python:
'width: %s' % (width and str(width)+'px' or '450px');
value data/?name" />
value data/?name|string:" />
</metal:textline>
<metal:textline define-macro="input_date">
<input type="text" name="field" style="width: 450px"
tal:define="width field/width|nothing"
tal:attributes="name name;
style python:
'width: %s' % (width and str(width)+'px' or '450px');
value data/?name|string:" />
</metal:textline>
@ -93,7 +103,7 @@
tal:attributes="name name;
style python:
'width: %s' % (width and str(width)+'px' or '450px');
value data/?name" />
value data/?name|string:" />
</metal:password>
@ -105,7 +115,7 @@
rows python: height or 3;
style python:
'width: %s' % (width and str(width)+'px' or '450px');"
tal:content="data/?name">
tal:content="data/?name|string:">
</textarea>
</metal:textarea>
@ -126,7 +136,7 @@
tal:content="item/title"
tal:attributes="value item/token;
selected python:
item['token'] == data[name]">Mrs</option>
item['token'] == data.get(name)">Mrs</option>
</select>
</metal:dropdown>

View file

@ -68,6 +68,8 @@ class SchemaFactory(object):
#default_method=getattr(field, 'default_method', None),
vocabulary=voc,
title=field.title,
description=field.description)
description=field.description,
readonly=field.readonly,
nostore=getattr(field, 'nostore', False),)
fields.append(f)
return Schema(name=interface.__name__, *fields, **kw)

View file

@ -38,6 +38,8 @@ class Field(Component):
implements(IField)
required = False
readonly = False
nostore = False
standardFieldName = None
vocabulary = None
renderFactory = None
@ -73,7 +75,7 @@ class Field(Component):
@property
def storeData(self):
return self.getFieldTypeInfo().storeData
return not self.nostore and self.getFieldTypeInfo().storeData
def getTitleValue(self):
return self.title or self.name

View file

@ -78,7 +78,7 @@ class Editor(BaseInstance):
# don't do anything if there is an error
return formState
for f in template.components:
if not f.storeData:
if not f.storeData or f.readonly:
# a dummy field, e.g. a spacer
continue
name = f.name
@ -99,7 +99,9 @@ class Editor(BaseInstance):
formState = FormState()
if self.template is None:
return formState
for f in self.template.fields:
for f in self.template.components:
if f.readonly:
continue
fi = f.getFieldInstance()
value = data.get(f.name)
fi.validate(value, data)

View file

@ -86,7 +86,7 @@ fieldTypes = SimpleVocabulary((
FieldType('textarea', 'textarea', u'Textarea'),
FieldType('number', 'number', u'Number',
inputRenderer='input_textline', instanceName='number'),
#FieldType('date', 'date', u'Date'),
FieldType('date', 'date', u'Date'),
FieldType('fileupload', 'fileupload', u'File upload',
instanceName='fileupload'),
#FieldType('checkbox', 'checkbox', u'Checkbox'),