* Instead of using Literal types, overload QuerySet.values_list in the plugin. Fixes#43.
- Add a couple of extra type checks that Django makes:
1) 'flat' and 'named' can't be used together.
2) 'flat' is not valid when values_list is called with more than one field.
* Determine better row types for values_list/values based on fields specified.
- In the case of values_list, we use a Row type with either a single primitive, Tuple, or NamedTuple.
- In the case of values, we use a TypedDict.
- In both cases, Any is used as a fallback for individual fields if those fields cannot be resolved.
A couple other fixes I made along the way:
- Don't create reverse relation for ForeignKeys with related_name='+'
- Don't skip creating other related managers in AddRelatedManagers if a dynamic value is encountered
for related_name parameter, or if the type cannot be determined.
* Fix for TypedDict so that they are considered anonymous.
* Clean up some comments.
* Implement making TypedDict anonymous in a way that doesn't crash sometimes.
* Fix flake8 errors.
* Remove even uglier hack about making TypedDict anonymous.
* Address review comments. Write a few better comments inside tests.
* Fix crash when running with mypyc ("interpreted classes cannot inherit from compiled") due to the way I extended TypedDictType.
- Implemented the hack in another way that works on mypyc.
- Added a couple extra tests of accessing 'id' / 'pk' via values_list.
* Fix flake8 errors.
* Support annotation expressions (use type Any) for TypedDicts row types returned by values_list.
- Bonus points: handle values_list gracefully (use type Any) where Tuples are returned
where some of the fields arguments are not string literals.
- Add a couple of extra type checks that Django makes:
1) 'flat' and 'named' can't be used together.
2) 'flat' is not valid when values_list is called with more than one field.
* Support returning the correct values for the different QuerySet methods when using .values() and .values_list().
* Fix slicing on QuerySet. Fix django queries test, and remove some ignored errors that are no longer needed.
* Remove accidental change in RawQuerySet.
* Readded some still-necessary ignores to aggregation django test.
* Add more tests of first/last/earliest/last/__getitem__, per mkurnikov's comments.
- Fix .iterator()
* Re-add Iterator as base-class of QuerySet.
* Make QuerySet a Collection.
* - Fix return type for QuerySet.select_for_update().
- Use correct return type for QuerySet.dates() / QuerySet.datetimes().
- Use correct type params in return type for QuerySet.__and__ / QuerySet.__or__
- Re-add Sized as base class for QuerySet.
- Add test of .all() for all _Row types.
- Add test of .get() for all _Row types.
- Remove some redundant QuerySet method tests.
* Automatically fill in second type parameter for QuerySet.
... if second parameter is omitted.
* Fix bug where models with a class variable using a manager defined would interfere with other managers.
- Fill in the type argument for that particular instance of the manager, rather than modifying the bases of the Manager type.
- Instantiate a new Instance from determine_proper_manager_type so The code doesn't crash under mypy-mypyc.
* Use helpers.reparametrize_instance per review comment.
* Updated ignored errors in Django test for get_objects_or_404.
- For some reason, `Manager[nothing]` is now removed from expected types.
However, I think this makes sense anyway, as Manager is a subclass of QuerySet.
* Make CharField(blank=True) not be considered nullable
The documentation on [blank](https://docs.djangoproject.com/en/2.1/ref/models/fields/#blank) says that it "will allow the entry of an empty value", which for a string is just a 0-length string. This patch allows `CharField(blank=True,...)` to no longer be considered `Optional`.
closes#38
* fixed tests for `CharField(blank=True)`
* allow blank CharField to be nullable in the constructor, but the underlying type
is str (unless `null=True`)
- Made id_list of type Sequence[Any], rather than Any, according to mkurnikov's review.
- Removed **kwargs.
- Made returned Dict keys of type Any rather than int or str as it depends on the provided field's type.
- Added test with examples from Django docs.
- The keys are still Union[int, str] which doesn't cover all
possibilities, but it's not possible to cover without handling this in
the plugin, because the type of the Dict keys are dynamic depending on
which value for field_name you pass in.