Opened 5 years ago
Last modified 5 years ago
#30969 closed Uncategorized
Add support for query expressions as default values — at Initial Version
Reported by: | Johannes Maron | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Add support for query expressions – like Now()
– as default values of model fields.
e.g.
class MyModel(models.Model): created = models.DateTimeField(default=models.Now())
This was originally part of my patch for #29444(https://code.djangoproject.com/ticket/29444), but I deferred it to keep the changeset more moderate.
There are a couple things here to consider:
- This feature will only be supported in PostgreSQL and Oracle. Other Databases do allow setting defaults, but can not return them on insert.
- Since the default is provided by the database, fields with a query expression as a default should default not to be editable. This will avoid confusion in interfaces like, Django admin, since these fields will be empty upon insert and then magically have a value. This is behavior would be consistent with the auto increment fields.
Since I extracted this from another feature branch, the patch is already done. I will link it, as it might help to understand the proposal a bit better.
This is the current patch:
https://github.com/django/django/pull/11783