i think we should really use `attributeNames()` here rather than the columns, as that makes it a lot easier for child classes to deal with virtual attributes if they need to