Doesn't putting it in there mean that it will no longer be copied at all by smart_update(). That is likely to have rather far reaching consequences. A more localized fix would probably be to change the update() book method to preserve the contents of that field instead. Something like
Code:
dc = getattr(book, 'device_collections', None)
book.smart_update()
if not getattr(book, 'device_collections', None):
book.device_collections = dc