You're right that there is an inconsistency, but I think that we should change documentation. When we were considering `ordering` attribute, we decided that we allow only for list and tuples and any other kind of iterable is forbidden. The main reason for that was that it simplified implementation, you can just write:
```
isinstance(cls._meta.ordering, (list, tuple))
```
instead of
```
is_iterable(cls._meta.ordering) and not isinstance(cls._meta.ordering, six.string_types)
```

Now I see some another reason: the "must be a list or tuple" version is more newbie-friendly who may lack knowledge about iterators. And it's really unlikely that a Django user would like to use something else than tuple/list. What's more if you grep documentation as well as code, you can see that "a list or tuple" version is preferred.

I think we should do the same thing with `choices`. Here is the patch : https://github.com/chrismedrela/django/commit/795b3748f0707cf8a6237bbc5d66396f13462d47