Commit graph

839 commits

Author SHA1 Message Date
Ben Steinberg
eba26d6bd4 Fix typo 2020-10-29 09:11:30 -04:00
Arseniy Panfilov
b302580283 use empty set instead of a dict for an 'empty set' test case 2020-10-15 15:51:33 +06:00
Arseniy Panfilov
e9c45c71d1 update implementation of TimeStampedModel.save to handle various ways of specifying 'update_fields' 2020-10-15 15:51:33 +06:00
Arseniy Panfilov
fdd3af34d9 failing tests with different types of arguments for 'updated_fields' 2020-10-15 15:51:33 +06:00
kishorkunal-raj
1b3f7d6262 Adding ppc64le architecture support on travis-ci 2020-10-15 15:49:11 +06:00
Hasan Ramezani
be1c0f571e Add farsi translation. 2020-09-23 09:29:26 +06:00
Hasan Ramezani
94db7b06e6 Replace deprecated django-admin.py with django-admin in CONTRIBUTING.rst 2020-09-23 09:29:26 +06:00
Hasan Ramezani
fed287e6fb Update test requirements. 2020-09-17 20:44:42 +06:00
H. Buğra Aydın
2ad67e77b1
Add status_changed field to upload_fields parameter during save if status field is present (#441)
* implementation/tests

* naming problem
2020-09-17 20:34:57 +06:00
Hasan Ramezani
b7770165d5 Add support for Django 3.1 2020-09-17 17:27:55 +06:00
Craig Anderson
b7a160936f Add available_objects soft deletable model manager. Emit deprecation warning when using objects soft deletable manager. 2020-08-25 16:40:09 +06:00
Craig Anderson
eb00f65c81 Change assert calls to avoid deprecation warnings. 2020-08-12 16:33:07 +06:00
Skia
33e46ebd53 managers: avoid querying too much tables when not needed
When calling `select_related()` with an empty list of arguments [1], Django will
try to prefetch some data by doing some first level joints with the related
classes.
This can lead to obvious negative performance impact, but this also breaks some
workarounds for having inheritance for foreign keys [2], as those solutions rely
on lazy evaluation of the related object.

[1]: a4e6030904/django/db/models/query.py (L1051)
     Only passing an explicit `None` to `select_related` will disable the magic.
[2]: https://github.com/jazzband/django-model-utils/issues/11

As examples, here are the generated SQL requests in
InheritanceManagerRelatedTests.test_get_method_with_select_subclasses_check_for_useless_join:

  * without this fix, without adding `.select_related(None)`
```sql
SELECT
    "tests_inheritancemanagertestparent"."id",
    "tests_inheritancemanagertestparent"."non_related_field_using_descriptor",
    "tests_inheritancemanagertestparent"."related_id",
    "tests_inheritancemanagertestparent"."normal_field",
    "tests_inheritancemanagertestparent"."related_self_id",
    "tests_inheritancemanagertestchild4"."other_onetoone_id",
    "tests_inheritancemanagertestchild4"."parent_ptr_id", T3."id",
    T3."non_related_field_using_descriptor", T3."related_id", T3."normal_field",
    T3."related_self_id"
FROM
    "tests_inheritancemanagertestchild4"
INNER JOIN
    "tests_inheritancemanagertestparent" ON
    ("tests_inheritancemanagertestchild4"."parent_ptr_id" = "tests_inheritancemanagertestparent"."id")
INNER JOIN
    "tests_inheritancemanagertestparent" T3 ON
    ("tests_inheritancemanagertestchild4"."other_onetoone_id" = T3."id")
WHERE
    "tests_inheritancemanagertestchild4"."parent_ptr_id" = 191
```

  * with either the fix, or by adding `.select_related(None)` after `.select_subclasses()`
```sql
SELECT
    "tests_inheritancemanagertestparent"."id",
    "tests_inheritancemanagertestparent"."non_related_field_using_descriptor",
    "tests_inheritancemanagertestparent"."related_id",
    "tests_inheritancemanagertestparent"."normal_field",
    "tests_inheritancemanagertestparent"."related_self_id",
    "tests_inheritancemanagertestchild4"."other_onetoone_id",
    "tests_inheritancemanagertestchild4"."parent_ptr_id"
FROM
    "tests_inheritancemanagertestchild4"
INNER JOIN
    "tests_inheritancemanagertestparent" ON
    ("tests_inheritancemanagertestchild4"."parent_ptr_id" = "tests_inheritancemanagertestparent"."id")
WHERE
    "tests_inheritancemanagertestchild4"."parent_ptr_id" = 191

```
2020-07-08 16:59:05 +06:00
Trevor Watson
b7d0abccf4 Document current supported versions 2020-06-11 21:24:11 +06:00
skazancev
bf4b65a437 removed model from DeferredAttributeTracker 2020-05-28 22:40:13 +06:00
Brian Rutledge
71c57e0ebd Fix tox django factors
I noticed this discrepancy while attempting to determine compatibility of versions of django-model-utils and Django. I haven't tested it locally, because I'm getting `psycopg2.OperationalError: could not connect to server`.
2020-04-28 21:36:51 +06:00
Adam Johnson
d7e235603e Document Django 3.0 enumeration types
Could also consider deprecating, at least when minimum supported Django is 3.0.
2020-03-18 09:41:43 +06:00
H. Buğra Aydın
b0a6b78c80 added explanation for the new feature
i forgot to change changes file to explain the feature below, updating accordingly:

3e32ae257b
2020-03-02 16:46:09 +06:00
Martín Raúl Villalba
6fba04ec4f Satisfy deprecation warning under Django 3.0.3 2020-03-01 08:55:31 +06:00
H. Buğra Aydın
3e32ae257b Overriding TimeStampedModel's save() method (#412)
* Overriding TimeStampedModel's save() method

to update modified field automatically when update_fields argument is used but modified was not given as a parameter.

* fixed a small error in logic

* added tests for new functionality
2020-01-23 13:19:06 +06:00
Sergey Tikhonov
1386c379b7 FieldTracker should patch save_base instead of save (#404)
* add test for reproducing FieldTracker update_fields issue

FieldTracker does not see update_fields changed in tracked model.save() method

* Patch Model.save_base instead of save

This change allows proper capturing update_fields kwarg if is is changed in overridden save() method.

* Add some details about FieldTracker implementation

* Mention FieldTracker behavior change
2019-12-15 22:43:58 +06:00
Sergey Tikhonov
d756a4a8ce patch Model.refresh_from_db in FieldTracker (#403)
* patch Model.refresh_from_db in FieldTracker

* add info about refresh_from_db patching to CHANGES.rst
2019-12-15 20:28:15 +06:00
Simon Charette
dd0d1bb01a
There's no 3.3.0 release. 2019-12-11 10:06:03 -05:00
Rémy HUBSCHER
35ba2bde31
Back to development 4.0.1 2019-12-11 15:48:26 +01:00
Rémy HUBSCHER
8af8cf269c
Prepare 4.0.0 release. 2019-12-11 15:47:18 +01:00
Misha K
5aa40c66be Add django 3.0 to the test matrix and drop six (#395)
*  - add django 3.0 to the test matrix
 - drop six

* add entry in CHANGES

* remove context kwarg

* fix test with DeferredAttribute

* rename StringyDescriptor's name to attname

* Fix flake8

* Drop support for Django 1.11 because the API are not compatibles anymore with Django 3.0

* Try to fix tests.

* Define model for the field mock.

* Simplifies the code.

* Properly mock the field.

* Typo

* Use the new API field name.

* Call it attname

* Grab the field instance from the model.

* Use postgres in travis tests.

* Django 2.0.1 minimum is needed.

* Update Changelog to tell about breaking Django 1.11.

* Update changelog to tell about Django 3.0 support.

* @natim review.
2019-12-09 19:37:16 +06:00
Adam Dobrawy
ffa1a85dc7 Modernize Python syntax, add Python 3.8 (#398)
* Modernize Python syntax, add Python 3.8

* Update Python version & dist in TravisCI

* Add postgresql as addon

* Switch to psycopg2-binary

* Drop django.utils.six
2019-11-14 22:50:04 +06:00
Hasan Ramezani
aa94194dbc Drop Python 2 support. (#394) 2019-09-30 14:08:52 +06:00
Asif Saif Uddin
c9c04da1b2
Merge pull request #390 from jazzband/remove-unsupported-django-version-hacks
Remove unsupported django version hacks.
2019-08-21 16:59:24 +06:00
Rémy HUBSCHER
c19ea5b04f
Add changelog. 2019-08-21 11:19:13 +02:00
Rémy HUBSCHER
e6c7b567d1
Remove unsupported django version hacks. 2019-08-21 11:02:23 +02:00
Asif Saif Uddin
82dfed6a84
Merge pull request #386 from jazzband/improve-makefile
Improve Makefile to handle VENV creation if needed.
2019-08-21 01:10:42 +06:00
Asif Saif Uddin
d901b233d3
Merge pull request #387 from jazzband/instance-of
Add ability to filter an InheritanceQuerySet by model.
2019-08-20 23:45:02 +06:00
Rémy HUBSCHER
54477b653c
Merge pull request #281 from georgemillard/patch-1
Update Docs - utilities.rst based on issue #195
2019-08-20 17:17:44 +02:00
georgemillard
39bd66d120
Added tracker field to the Child model definition 2019-08-20 16:01:15 +01:00
Rémy HUBSCHER
d51368cdc3
Merge pull request #381 from Atorich/fix_tests
Fix tests
2019-08-20 15:42:45 +02:00
Rémy HUBSCHER
cfbea2ca89
Merge pull request #388 from jazzband/bugfix/issue_109
Implemented ability to lie about modified fields
2019-08-20 15:40:41 +02:00
Eugene
7d9ebc1b49
Skip AbstractModelTrackerTests
https://github.com/jazzband/django-model-utils/pull/381
2019-08-20 19:00:25 +07:00
Rémy HUBSCHER
1878537f25
Merge branch 'master' into bugfix/issue_109 2019-08-20 13:46:07 +02:00
Rémy HUBSCHER
976c17024e
Merge branch 'master' into instance-of 2019-08-20 12:50:09 +02:00
Rémy HUBSCHER
4e84b6d7bd
Improve Makefile to handle VENV creation if needed. 2019-08-20 12:09:51 +02:00
Asif Saif Uddin
d3534d656d
Merge pull request #384 from Asday/subset
Added `Choices().subset()`.
2019-08-20 05:02:47 +06:00
asday
488be3ff01 Updated documentation and bumped minor version. 2019-08-19 23:02:43 +01:00
Asif Saif Uddin
1c2992476f
Merge pull request #383 from Asday/flake8
Fixed flake8 issues.
2019-08-20 03:54:10 +06:00
asday
1142254f62 not x in y => x not in y. 2019-08-19 22:38:30 +01:00
asday
d9aa34e498 Fixed spacing.
Extraneous whitespace, too many blank lines, and too few blank
lines.
2019-08-19 22:38:05 +01:00
asday
51a720386c Moved a binary operator to the start of a line. 2019-08-19 22:37:16 +01:00
asday
b7483fa538 Removed an unused import. 2019-08-19 22:37:01 +01:00
asday
383740e8ab Added Choices().subset(). 2019-08-19 22:33:08 +01:00
Eugene Kuznetsov
23148f481c fix test case 2019-08-05 18:45:48 +07:00