always display/process all rows within cardinality if this is set
This commit is contained in:
parent
4f54192ae4
commit
a1e2d52967
1 changed files with 44 additions and 22 deletions
|
@ -79,11 +79,15 @@ class GridFieldInstance(ListFieldInstance):
|
||||||
def display(self, value):
|
def display(self, value):
|
||||||
headers = [fi.context.title for fi in self.columnFieldInstances]
|
headers = [fi.context.title for fi in self.columnFieldInstances]
|
||||||
rows = []
|
rows = []
|
||||||
for item in value or []:
|
value = value or []
|
||||||
row = []
|
cardinality = getattr(self.context, 'cardinality', None)
|
||||||
for fi in self.columnFieldInstances:
|
for item in value:
|
||||||
row.append(fi.display(item.get(fi.name)))
|
rows.append([fi.display(item.get(fi.name))
|
||||||
rows.append(row)
|
for fi in self.columnFieldInstances])
|
||||||
|
if cardinality > len(value):
|
||||||
|
for item in range(len(value), self.context.cardinality):
|
||||||
|
rows.append([fi.display(fi.default)
|
||||||
|
for fi in self.columnFieldInstances])
|
||||||
return dict(headers=headers, rows=rows)
|
return dict(headers=headers, rows=rows)
|
||||||
|
|
||||||
def unmarshall(self, value):
|
def unmarshall(self, value):
|
||||||
|
@ -116,17 +120,21 @@ class GridFieldInstance(ListFieldInstance):
|
||||||
|
|
||||||
def unmarshallRow(self, row, idx=None):
|
def unmarshallRow(self, row, idx=None):
|
||||||
item = {}
|
item = {}
|
||||||
|
cardinality = getattr(self.context, 'cardinality', None)
|
||||||
for fi in self.columnFieldInstances:
|
for fi in self.columnFieldInstances:
|
||||||
if idx is not None:
|
if idx is not None:
|
||||||
fi.index = idx
|
fi.index = idx
|
||||||
value = fi.unmarshall(row.get(fi.name) or u'')
|
value = fi.unmarshall(row.get(fi.name) or u'')
|
||||||
if isinstance(value, basestring):
|
if isinstance(value, basestring):
|
||||||
value = value.strip()
|
value = value.strip()
|
||||||
if fi.default is not None:
|
if idx < cardinality:
|
||||||
if value == fi.default:
|
|
||||||
continue
|
|
||||||
if value:
|
|
||||||
item[fi.name] = value
|
item[fi.name] = value
|
||||||
|
else:
|
||||||
|
if fi.default is not None:
|
||||||
|
if value == fi.default:
|
||||||
|
continue
|
||||||
|
if value:
|
||||||
|
item[fi.name] = value
|
||||||
ignoreInCheckOnEmpty = getattr(self.context, 'ignoreInCheckOnEmpty', [])
|
ignoreInCheckOnEmpty = getattr(self.context, 'ignoreInCheckOnEmpty', [])
|
||||||
for k, v in item.items():
|
for k, v in item.items():
|
||||||
if k not in ignoreInCheckOnEmpty and v != '__no_change__':
|
if k not in ignoreInCheckOnEmpty and v != '__no_change__':
|
||||||
|
@ -141,11 +149,19 @@ class RecordsFieldInstance(GridFieldInstance):
|
||||||
|
|
||||||
def marshall(self, value):
|
def marshall(self, value):
|
||||||
result = []
|
result = []
|
||||||
for row in value or []:
|
value = value or []
|
||||||
|
cardinality = getattr(self.context, 'cardinality', None)
|
||||||
|
for row in value:
|
||||||
item = {}
|
item = {}
|
||||||
for fi in self.columnFieldInstances:
|
for fi in self.columnFieldInstances:
|
||||||
item[fi.name] = fi.marshall(row.get(fi.name))
|
item[fi.name] = fi.marshall(row.get(fi.name))
|
||||||
result.append(item)
|
result.append(item)
|
||||||
|
if cardinality > len(value):
|
||||||
|
for row in range(len(value), cardinality):
|
||||||
|
item = {}
|
||||||
|
for fi in self.columnFieldInstances:
|
||||||
|
item[fi.name] = fi.marshall(fi.default)
|
||||||
|
result.append(item)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def unmarshall(self, value):
|
def unmarshall(self, value):
|
||||||
|
@ -156,23 +172,29 @@ class RecordsFieldInstance(GridFieldInstance):
|
||||||
for idx, row in enumerate(value):
|
for idx, row in enumerate(value):
|
||||||
item = self.unmarshallRow(row, idx)
|
item = self.unmarshallRow(row, idx)
|
||||||
if item:
|
if item:
|
||||||
|
oldItem = {}
|
||||||
if len(oldValue) > idx:
|
if len(oldValue) > idx:
|
||||||
oldItem = oldValue[idx]
|
oldItem = oldValue[idx]
|
||||||
for k, v in item.items():
|
for k, v in item.items():
|
||||||
if v != '__no_change__':
|
if v == '__no_change__':
|
||||||
oldItem[k] = v
|
if k in oldItem:
|
||||||
#if oldItem.get(k) == '__no_change__':
|
item[k] = oldItem[k]
|
||||||
# del oldItem[k]
|
else:
|
||||||
#if oldItem:
|
|
||||||
result.append(oldItem)
|
|
||||||
else:
|
|
||||||
for k, v in item.items():
|
|
||||||
if v == '__no_change__':
|
|
||||||
del item[k]
|
del item[k]
|
||||||
if item:
|
if item:
|
||||||
result.append(item)
|
result.append(item)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def validate(self, value, data=None):
|
||||||
|
if not value:
|
||||||
|
if self.context.required:
|
||||||
|
self.setError('required_missing')
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
for row in value:
|
||||||
|
for fi in self.columnFieldInstances:
|
||||||
|
fi.validate(row.get(fi.name) or u'')
|
||||||
|
|
||||||
|
|
||||||
class KeyTableFieldInstance(RecordsFieldInstance):
|
class KeyTableFieldInstance(RecordsFieldInstance):
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue