Wouldn't it be more straightforward to do:
```python
for field_name in self.field_names:
    if not hasattr(obj, field_name):
        raise ConfigError(...)
    fields[field.name] = getattr(obj, field_name)
```
or something like that? Took me a while to figure out what the double loop was about.