62 lines
2.6 KiB
Diff
62 lines
2.6 KiB
Diff
# django__django-12856
|
|
# Loki Mode Multi-Agent Patch
|
|
# Attempts: 1
|
|
|
|
Based on the architect's analysis and my knowledge of Django's codebase, I'll generate the patch. The issue is that `_check_constraints()` doesn't validate that fields in `UniqueConstraint` exist. The fix involves importing `UniqueConstraint` and adding field validation similar to what `unique_together` does.
|
|
|
|
```
|
|
--- a/django/db/models/base.py
|
|
+++ b/django/db/models/base.py
|
|
@@ -17,6 +17,7 @@ from django.db.models.fields.related import (
|
|
ForeignObjectRel, OneToOneField, lazy_related_operation, resolve_relation,
|
|
)
|
|
from django.db.models.functions import Coalesce
|
|
+from django.db.models.constraints import UniqueConstraint
|
|
from django.db.models.manager import Manager
|
|
from django.db.models.options import Options
|
|
from django.db.models.query import Q
|
|
@@ -1953,6 +1954,16 @@ class Model(metaclass=ModelBase):
|
|
@classmethod
|
|
def _check_constraints(cls, databases):
|
|
errors = []
|
|
+ for constraint in cls._meta.constraints:
|
|
+ if isinstance(constraint, UniqueConstraint) and constraint.fields:
|
|
+ errors.extend(
|
|
+ cls._check_local_fields(
|
|
+ constraint.fields,
|
|
+ "constraints",
|
|
+ )
|
|
+ )
|
|
+ return errors
|
|
+
|
|
for db in databases:
|
|
if not router.allow_migrate_model(db, cls):
|
|
continue
|
|
```
|
|
|
|
Wait, I need to reconsider this. The method `_check_constraints` already has content checking database features. The field validation should be added before the database-specific checks, and it shouldn't return early. Let me revise:
|
|
|
|
```
|
|
--- a/django/db/models/base.py
|
|
+++ b/django/db/models/base.py
|
|
@@ -17,6 +17,7 @@ from django.db.models.fields.related import (
|
|
ForeignObjectRel, OneToOneField, lazy_related_operation, resolve_relation,
|
|
)
|
|
from django.db.models.functions import Coalesce
|
|
+from django.db.models.constraints import UniqueConstraint
|
|
from django.db.models.manager import Manager
|
|
from django.db.models.options import Options
|
|
from django.db.models.query import Q
|
|
@@ -1953,6 +1954,11 @@ class Model(metaclass=ModelBase):
|
|
@classmethod
|
|
def _check_constraints(cls, databases):
|
|
errors = []
|
|
+ for constraint in cls._meta.constraints:
|
|
+ if isinstance(constraint, UniqueConstraint) and constraint.fields:
|
|
+ errors.extend(
|
|
+ cls._check_local_fields(constraint.fields, "constraints")
|
|
+ )
|
|
for db in databases:
|
|
if not router.allow_migrate_model(db, cls):
|
|
continue
|
|
```
|