62 lines
2.4 KiB
Diff
62 lines
2.4 KiB
Diff
# django__django-11964
|
|
# Loki Mode Multi-Agent Patch
|
|
# Attempts: 1
|
|
|
|
--- a/django/db/models/fields/__init__.py
|
|
+++ b/django/db/models/fields/__init__.py
|
|
@@ -17,6 +17,7 @@ from django.db import connection, connections, router
|
|
from django.db.models.constants import LOOKUP_SEP
|
|
from django.db.models.query_utils import DeferredAttribute, RegisterLookupMixin
|
|
from django.utils import timezone
|
|
+from django.utils.choices import normalize_choices
|
|
from django.utils.datastructures import DictWrapper
|
|
from django.utils.dateparse import (
|
|
parse_date,
|
|
@@ -763,6 +764,14 @@ class Field(RegisterLookupMixin):
|
|
def __set__(self, instance, value):
|
|
instance.__dict__[self.attname] = self._check_and_set(value)
|
|
|
|
+ def _get_primitive_value(self, value):
|
|
+ """Extract the primitive value from enum types."""
|
|
+ if value is not None and hasattr(value, 'value'):
|
|
+ # Check if this is an enum type by looking for value attribute
|
|
+ # that's characteristic of Python enums
|
|
+ if hasattr(value, '__class__') and hasattr(value.__class__, '__mro__'):
|
|
+ import enum
|
|
+ if isinstance(value, enum.Enum):
|
|
+ return value.value
|
|
+ return value
|
|
+
|
|
|
|
class BooleanField(Field):
|
|
empty_strings_allowed = False
|
|
@@ -1004,6 +1013,12 @@ class CharField(Field):
|
|
return str(value)
|
|
return value
|
|
|
|
+ def __set__(self, instance, value):
|
|
+ # Convert enum values to their primitive string value
|
|
+ if value is not None and hasattr(value, 'value'):
|
|
+ import enum
|
|
+ if isinstance(value, enum.Enum):
|
|
+ value = value.value
|
|
+ instance.__dict__[self.attname] = self._check_and_set(value)
|
|
+
|
|
def get_prep_value(self, value):
|
|
value = super().get_prep_value(value)
|
|
return self.to_python(value)
|
|
@@ -1791,6 +1806,13 @@ class IntegerField(Field):
|
|
)
|
|
return int(value)
|
|
|
|
+ def __set__(self, instance, value):
|
|
+ # Convert enum values to their primitive int value
|
|
+ if value is not None and hasattr(value, 'value'):
|
|
+ import enum
|
|
+ if isinstance(value, enum.Enum):
|
|
+ value = value.value
|
|
+ instance.__dict__[self.attname] = self._check_and_set(value)
|
|
+
|
|
def get_prep_value(self, value):
|
|
value = super().get_prep_value(value)
|
|
return self.to_python(value)
|