Opened 4 years ago
Closed 4 years ago
#32759 closed New feature (wontfix)
Use dataclasses to represent models
Reported by: | adsharma | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 3.2 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Django documentation and current practice are described in this example:
https://docs.djangoproject.com/en/3.2/intro/tutorial02/#creating-models
This has a number of limitations:
- Python's type checkers don't understand models.CharField and models.DateTimeField
- They do understand python strings and datetime objects
- There is some activity on typing-sig about teaching them more about lengths and limits
dataclasses introduced in 3.7 are seeing some adoption.
The same example can be represented as:
https://github.com/adsharma/fquery/pull/2
This is more ergonomic for python programmers trained on dataclasses.
Queries against these dataclasses can be expressed in one of two ways:
- A method chaining API such as:
https://github.com/adsharma/fquery/blob/main/tests/test_operators.py
- SQL via ActiveRecord or DataMapper
https://github.com/adsharma/dataclasses-sql/blob/master/tests/test_decorators.py
For this to work as well as current django models, two things need to happen:
- How to pass additional metadata about database schema? (dataclasses support metadata, perhaps make it more ergonomic?)
- What to do about indices, views and other db concepts
One school of thought is to use SQL DDL.
Some conversation on this topic here:
https://twitter.com/arundsharma/status/1390898932713066499
Would love to hear more from the django community on the topic.
Thanks for the proposition, however I don't think it needs to be built-in into Django it sounds like a third-party package is the best way to proceed.
By the way, you'll reach a wider audience if you write to the DevelopersMailingList about your ideas, see Requesting features.