plain.models 0.46.0__tar.gz → 0.47.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. {plain_models-0.46.0 → plain_models-0.47.0}/PKG-INFO +1 -1
  2. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/CHANGELOG.md +20 -0
  3. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/deletion.py +1 -1
  4. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/related_managers.py +6 -4
  5. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/query.py +111 -98
  6. {plain_models-0.46.0 → plain_models-0.47.0}/pyproject.toml +1 -1
  7. {plain_models-0.46.0 → plain_models-0.47.0}/tests/test_related_descriptors.py +81 -2
  8. {plain_models-0.46.0 → plain_models-0.47.0}/.gitignore +0 -0
  9. {plain_models-0.46.0 → plain_models-0.47.0}/LICENSE +0 -0
  10. {plain_models-0.46.0 → plain_models-0.47.0}/README.md +0 -0
  11. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/AGENTS.md +0 -0
  12. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/README.md +0 -0
  13. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/__init__.py +0 -0
  14. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/aggregates.py +0 -0
  15. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/__init__.py +0 -0
  16. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/__init__.py +0 -0
  17. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/base.py +0 -0
  18. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/client.py +0 -0
  19. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/creation.py +0 -0
  20. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/features.py +0 -0
  21. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/introspection.py +0 -0
  22. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/operations.py +0 -0
  23. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/schema.py +0 -0
  24. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/base/validation.py +0 -0
  25. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/ddl_references.py +0 -0
  26. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/__init__.py +0 -0
  27. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/base.py +0 -0
  28. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/client.py +0 -0
  29. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/compiler.py +0 -0
  30. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/creation.py +0 -0
  31. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/features.py +0 -0
  32. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/introspection.py +0 -0
  33. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/operations.py +0 -0
  34. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/schema.py +0 -0
  35. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/mysql/validation.py +0 -0
  36. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/__init__.py +0 -0
  37. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/base.py +0 -0
  38. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/client.py +0 -0
  39. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/creation.py +0 -0
  40. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/features.py +0 -0
  41. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/introspection.py +0 -0
  42. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/operations.py +0 -0
  43. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/postgresql/schema.py +0 -0
  44. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/__init__.py +0 -0
  45. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/_functions.py +0 -0
  46. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/base.py +0 -0
  47. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/client.py +0 -0
  48. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/creation.py +0 -0
  49. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/features.py +0 -0
  50. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/introspection.py +0 -0
  51. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/operations.py +0 -0
  52. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/sqlite3/schema.py +0 -0
  53. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backends/utils.py +0 -0
  54. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backups/__init__.py +0 -0
  55. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backups/cli.py +0 -0
  56. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backups/clients.py +0 -0
  57. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/backups/core.py +0 -0
  58. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/base.py +0 -0
  59. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/cli.py +0 -0
  60. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/config.py +0 -0
  61. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/connections.py +0 -0
  62. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/constants.py +0 -0
  63. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/constraints.py +0 -0
  64. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/database_url.py +0 -0
  65. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/db.py +0 -0
  66. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/default_settings.py +0 -0
  67. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/entrypoints.py +0 -0
  68. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/enums.py +0 -0
  69. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/exceptions.py +0 -0
  70. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/expressions.py +0 -0
  71. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/__init__.py +0 -0
  72. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/json.py +0 -0
  73. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/mixins.py +0 -0
  74. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/related.py +0 -0
  75. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/related_descriptors.py +0 -0
  76. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/related_lookups.py +0 -0
  77. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/fields/reverse_related.py +0 -0
  78. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/forms.py +0 -0
  79. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/functions/__init__.py +0 -0
  80. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/functions/comparison.py +0 -0
  81. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/functions/datetime.py +0 -0
  82. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/functions/math.py +0 -0
  83. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/functions/mixins.py +0 -0
  84. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/functions/text.py +0 -0
  85. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/functions/window.py +0 -0
  86. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/indexes.py +0 -0
  87. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/lookups.py +0 -0
  88. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/__init__.py +0 -0
  89. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/autodetector.py +0 -0
  90. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/exceptions.py +0 -0
  91. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/executor.py +0 -0
  92. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/graph.py +0 -0
  93. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/loader.py +0 -0
  94. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/migration.py +0 -0
  95. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/operations/__init__.py +0 -0
  96. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/operations/base.py +0 -0
  97. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/operations/fields.py +0 -0
  98. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/operations/models.py +0 -0
  99. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/operations/special.py +0 -0
  100. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/optimizer.py +0 -0
  101. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/questioner.py +0 -0
  102. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/recorder.py +0 -0
  103. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/serializer.py +0 -0
  104. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/state.py +0 -0
  105. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/utils.py +0 -0
  106. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/migrations/writer.py +0 -0
  107. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/options.py +0 -0
  108. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/otel.py +0 -0
  109. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/preflight.py +0 -0
  110. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/query_utils.py +0 -0
  111. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/registry.py +0 -0
  112. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/sql/__init__.py +0 -0
  113. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/sql/compiler.py +0 -0
  114. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/sql/constants.py +0 -0
  115. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/sql/datastructures.py +0 -0
  116. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/sql/query.py +0 -0
  117. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/sql/subqueries.py +0 -0
  118. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/sql/where.py +0 -0
  119. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/test/__init__.py +0 -0
  120. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/test/pytest.py +0 -0
  121. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/test/utils.py +0 -0
  122. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/transaction.py +0 -0
  123. {plain_models-0.46.0 → plain_models-0.47.0}/plain/models/utils.py +0 -0
  124. {plain_models-0.46.0 → plain_models-0.47.0}/tests/app/examples/migrations/0001_initial.py +0 -0
  125. {plain_models-0.46.0 → plain_models-0.47.0}/tests/app/examples/migrations/0002_test_field_removed.py +0 -0
  126. {plain_models-0.46.0 → plain_models-0.47.0}/tests/app/examples/migrations/0003_deleteparent_childsetnull_childsetdefault_and_more.py +0 -0
  127. {plain_models-0.46.0 → plain_models-0.47.0}/tests/app/examples/migrations/__init__.py +0 -0
  128. {plain_models-0.46.0 → plain_models-0.47.0}/tests/app/examples/models.py +0 -0
  129. {plain_models-0.46.0 → plain_models-0.47.0}/tests/app/settings.py +0 -0
  130. {plain_models-0.46.0 → plain_models-0.47.0}/tests/app/urls.py +0 -0
  131. {plain_models-0.46.0 → plain_models-0.47.0}/tests/test_database_url.py +0 -0
  132. {plain_models-0.46.0 → plain_models-0.47.0}/tests/test_delete_behaviors.py +0 -0
  133. {plain_models-0.46.0 → plain_models-0.47.0}/tests/test_exceptions.py +0 -0
  134. {plain_models-0.46.0 → plain_models-0.47.0}/tests/test_manager_assignment.py +0 -0
  135. {plain_models-0.46.0 → plain_models-0.47.0}/tests/test_models.py +0 -0
  136. {plain_models-0.46.0 → plain_models-0.47.0}/tests/test_related_manager_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain.models
3
- Version: 0.46.0
3
+ Version: 0.47.0
4
4
  Summary: Model your data and store it in a database.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-File: LICENSE
@@ -1,5 +1,25 @@
1
1
  # plain-models changelog
2
2
 
3
+ ## [0.47.0](https://github.com/dropseed/plain/releases/plain-models@0.47.0) (2025-09-25)
4
+
5
+ ### What's changed
6
+
7
+ - The `QuerySet.query` property has been renamed to `QuerySet.sql_query` to better distinguish it from the `Model.query` manager interface ([d250eea](https://github.com/dropseed/plain/commit/d250eeac03))
8
+
9
+ ### Upgrade instructions
10
+
11
+ - If you directly accessed the `QuerySet.query` property in your code (typically for advanced query manipulation or debugging), rename it to `QuerySet.sql_query`
12
+
13
+ ## [0.46.1](https://github.com/dropseed/plain/releases/plain-models@0.46.1) (2025-09-25)
14
+
15
+ ### What's changed
16
+
17
+ - Fixed `prefetch_related` for reverse foreign key relationships by correctly handling related managers in the prefetch query process ([2c04e80](https://github.com/dropseed/plain/commit/2c04e80dcd))
18
+
19
+ ### Upgrade instructions
20
+
21
+ - No changes required
22
+
3
23
  ## [0.46.0](https://github.com/dropseed/plain/releases/plain-models@0.46.0) (2025-09-25)
4
24
 
5
25
  ### What's changed
@@ -288,7 +288,7 @@ class Collector:
288
288
  # relationships are select_related as interactions between both
289
289
  # features are hard to get right. This should only happen in
290
290
  # the rare cases where .related_objects is overridden anyway.
291
- if not sub_objs.query.select_related:
291
+ if not sub_objs.sql_query.select_related:
292
292
  referenced_fields = set(
293
293
  chain.from_iterable(
294
294
  (rf.attname for rf in rel.field.foreign_related_fields)
@@ -17,19 +17,21 @@ from plain.models.utils import resolve_callables
17
17
 
18
18
  def _filter_prefetch_queryset(queryset, field_name, instances):
19
19
  predicate = Q(**{f"{field_name}__in": instances})
20
- if queryset.query.is_sliced:
20
+ if queryset.sql_query.is_sliced:
21
21
  if not db_connection.features.supports_over_clause:
22
22
  raise NotSupportedError(
23
23
  "Prefetching from a limited queryset is only supported on backends "
24
24
  "that support window functions."
25
25
  )
26
- low_mark, high_mark = queryset.query.low_mark, queryset.query.high_mark
27
- order_by = [expr for expr, _ in queryset.query.get_compiler().get_order_by()]
26
+ low_mark, high_mark = queryset.sql_query.low_mark, queryset.sql_query.high_mark
27
+ order_by = [
28
+ expr for expr, _ in queryset.sql_query.get_compiler().get_order_by()
29
+ ]
28
30
  window = Window(RowNumber(), partition_by=field_name, order_by=order_by)
29
31
  predicate &= GreaterThan(window, low_mark)
30
32
  if high_mark is not None:
31
33
  predicate &= LessThanOrEqual(window, high_mark)
32
- queryset.query.clear_limits()
34
+ queryset.sql_query.clear_limits()
33
35
  return queryset.filter(predicate)
34
36
 
35
37