'Read from the database in order to fetch ``field`` (:class:`Field`
instance) for ``self`` in cache.'

@api.multi
def _prefetch_field(self, field):

    records = self._in_cache_without(field)
    fs = {field}
    if (self._context.get('prefetch_fields', True) and field.prefetch):
        fs.update((f for f in self._fields.itervalues() if f.prefetch if (not (f.groups and (not self.user_has_groups(f.groups)))) if (not (f.compute and self.env.field_todo(f)))))
    records -= self.env.field_todo(field)
    if self.env.in_onchange:
        for f in list(fs):
            if (f.compute or (f.name in self._cache)):
                fs.discard(f)
            else:
                records &= self._in_cache_without(f)
    assert ((self in records) and (field in fs))
    records = records.with_prefetch(self._prefetch)
    result = []
    try:
        result = records.read([f.name for f in fs], load='_classic_write')
    except AccessError:
        result = self.read([f.name for f in fs], load='_classic_write')
    if (field not in self._cache):
        for values in result:
            record = self.browse(values.pop('id'), self._prefetch)
            record._cache.update(record._convert_to_cache(values, validate=False))
        if (not self._cache.contains(field)):
            e = AccessError(('No    value    found    for    %s.%s' % (self, field.name)))
            self._cache[field] = FailedValue(e)
