I would recommend not just returning the labels, but also the values (in the dict structure). This may be a bit redundant, but I don't like having disparate structures that have to be re-mapped downstream.

The only thing this logic should have to do is get the labels for the values.

```python
if 'cleaned_data' in node._meta:
    value = node._meta['cleaned_data']['value']
    value_labels = field.value_labels()

    if isinstance(value, QuerySet):
        cleaned = [{'value': val.pk, 'label': value_labels[val.pk]} for val in value]
    elif isinstance(value, (list, tuple)):
        cleaned = [{'value': val, 'label': value_labels[val]} for val in value]
    else:
        cleaned = {'value': value, 'label': value_labels[value]}

    attrs['cleaned_value'] = cleaned
```