'Return a list of all forward fields on the model and its parents,
excluding ManyToManyFields.
Private API intended only to be used by Django itself; get_fields()
combined with filtering of field properties is the public API for
obtaining this field list.'

@cached_property
def fields(self):

    def is_not_an_m2m_field(f):
        return (not (f.is_relation and f.many_to_many))
    def is_not_a_generic_relation(f):
        return (not (f.is_relation and f.one_to_many))
    def is_not_a_generic_foreign_key(f):
        return (not (f.is_relation and f.many_to_one and (not (hasattr(f.remote_field, 'model') and f.remote_field.model))))
    return make_immutable_fields_list('fields', (f for f in self._get_fields(reverse=False) if (is_not_an_m2m_field(f) and is_not_a_generic_relation(f) and is_not_a_generic_foreign_key(f))))
