87 lines
4.0 KiB
Diff
87 lines
4.0 KiB
Diff
# django__django-13265
|
|
# Loki Mode Multi-Agent Patch
|
|
# Attempts: 1
|
|
|
|
Based on my knowledge of Django's migration autodetector, I can generate the patch. The issue is that `AlterOrderWithRespectTo` creates the `_order` field, but `AddIndex` operations that reference `_order` are being generated before it. The fix needs to ensure proper dependency ordering.
|
|
|
|
```
|
|
--- a/django/db/migrations/autodetector.py
|
|
+++ b/django/db/migrations/autodetector.py
|
|
@@ -1,3 +1,4 @@
|
|
+import re
|
|
from django.conf import settings
|
|
from django.db import models
|
|
from django.db.migrations import operations
|
|
@@ -231,6 +232,21 @@ class MigrationAutodetector:
|
|
),
|
|
)
|
|
)
|
|
+ # Depend on AlterOrderWithRespectTo if the index contains _order
|
|
+ if any(field_name == '_order' or field_name.lstrip('-') == '_order' for field_name in index.fields):
|
|
+ self.add_dependency(
|
|
+ op,
|
|
+ (app_label, model_name, None, 'order_wrt_changed'),
|
|
+ )
|
|
+ # Also add dependency for the model itself since _order
|
|
+ # is created by order_with_respect_to
|
|
+ for model_state in self.to_state.models.get((app_label, model_name), []):
|
|
+ pass # Model existence is already handled above
|
|
self.add_operation(
|
|
app_label,
|
|
operations.AddIndex(
|
|
@@ -1081,6 +1097,8 @@ class MigrationAutodetector:
|
|
(app_label, model_name, order_with_respect_to, True),
|
|
(app_label, model_name, None, True),
|
|
)
|
|
+ # Provide order_wrt_changed dependency for indexes on _order
|
|
+ self._add_dependencies_for_order_wrt(app_label, model_name)
|
|
self.add_operation(
|
|
app_label,
|
|
operations.AlterOrderWithRespectTo(
|
|
```
|
|
|
|
Let me reconsider the Django codebase structure and provide a correct patch:
|
|
|
|
--- a/django/db/migrations/autodetector.py
|
|
+++ b/django/db/migrations/autodetector.py
|
|
@@ -1040,6 +1040,19 @@ class MigrationAutodetector:
|
|
),
|
|
dependencies=dependencies,
|
|
)
|
|
+ # Add dependency for indexes that reference the _order field.
|
|
+ # The _order field is created by AlterOrderWithRespectTo, so any
|
|
+ # AddIndex operations that include _order must depend on this operation.
|
|
+ for (idx_app_label, idx_model_name), alt_indexes in self.altered_indexes.items():
|
|
+ if idx_app_label == app_label and idx_model_name == model_name:
|
|
+ for index in alt_indexes.get('added_indexes', []):
|
|
+ if '_order' in index.fields or any(
|
|
+ f.lstrip('-') == '_order' for f in index.fields
|
|
+ ):
|
|
+ self.add_dependency(
|
|
+ (app_label, model_name, index.name, 'add_index'),
|
|
+ (app_label, model_name, None, 'order_wrt_changed'),
|
|
+ )
|
|
|
|
def generate_altered_db_table(self):
|
|
models_to_check = self.kept_model_keys.union(
|
|
|
|
Actually, let me provide the correct fix based on how Django's autodetector actually works with dependencies:
|
|
|
|
--- a/django/db/migrations/autodetector.py
|
|
+++ b/django/db/migrations/autodetector.py
|
|
@@ -226,6 +226,15 @@ class MigrationAutodetector:
|
|
)
|
|
for index in indexes:
|
|
self.add_operation(
|
|
app_label,
|
|
operations.AddIndex(
|
|
model_name=model_name,
|
|
index=index,
|
|
),
|
|
+ dependencies=[
|
|
+ (app_label, model_name, None, "order_wrt_changed")
|
|
+ ] if any(
|
|
+ f == '_order' or f.lstrip('-') == '_order'
|
|
+ for f in index.fields
|
|
+ ) else [],
|
|
)
|