Files
app-store-optimization/skills/loki-mode/benchmarks/results/2026-01-05-10-37-54/swebench-loki-patches/django__django-13265.patch

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 [],
)