summaryrefslogtreecommitdiff
path: root/django/db/models/fields
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/fields')
-rw-r--r--django/db/models/fields/__init__.py10
-rw-r--r--django/db/models/fields/related.py10
-rw-r--r--django/db/models/fields/related_descriptors.py30
3 files changed, 16 insertions, 34 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 809a14277e..68a42f0236 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -2045,15 +2045,11 @@ class SlugField(CharField):
default_validators = [validators.validate_slug]
description = _("Slug (up to %(max_length)s)")
- def __init__(self, *args, **kwargs):
- kwargs['max_length'] = kwargs.get('max_length', 50)
- # Set db_index=True unless it's been set manually.
- if 'db_index' not in kwargs:
- kwargs['db_index'] = True
- self.allow_unicode = kwargs.pop('allow_unicode', False)
+ def __init__(self, *args, max_length=50, db_index=True, allow_unicode=False, **kwargs):
+ self.allow_unicode = allow_unicode
if self.allow_unicode:
self.default_validators = [validators.validate_unicode_slug]
- super().__init__(*args, **kwargs)
+ super().__init__(*args, max_length=max_length, db_index=db_index, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index dd84d780fb..cf39de7287 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -922,15 +922,14 @@ class ForeignKey(ForeignObject):
if self.remote_field.field_name is None:
self.remote_field.field_name = cls._meta.pk.name
- def formfield(self, **kwargs):
- db = kwargs.pop('using', None)
+ def formfield(self, *, using=None, **kwargs):
if isinstance(self.remote_field.model, str):
raise ValueError("Cannot create form field for %r yet, because "
"its related model %r has not been loaded yet" %
(self.name, self.remote_field.model))
defaults = {
'form_class': forms.ModelChoiceField,
- 'queryset': self.remote_field.model._default_manager.using(db),
+ 'queryset': self.remote_field.model._default_manager.using(using),
'to_field_name': self.remote_field.field_name,
}
defaults.update(kwargs)
@@ -1609,11 +1608,10 @@ class ManyToManyField(RelatedField):
def save_form_data(self, instance, data):
getattr(instance, self.attname).set(data)
- def formfield(self, **kwargs):
- db = kwargs.pop('using', None)
+ def formfield(self, *, using=None, **kwargs):
defaults = {
'form_class': forms.ModelMultipleChoiceField,
- 'queryset': self.remote_field.model._default_manager.using(db),
+ 'queryset': self.remote_field.model._default_manager.using(using),
}
defaults.update(kwargs)
# If initial is passed in, it's a list of related objects, but the
diff --git a/django/db/models/fields/related_descriptors.py b/django/db/models/fields/related_descriptors.py
index b3e87cd482..5899a2324c 100644
--- a/django/db/models/fields/related_descriptors.py
+++ b/django/db/models/fields/related_descriptors.py
@@ -510,10 +510,8 @@ def create_reverse_many_to_one_manager(superclass, rel):
self.core_filters = {self.field.name: instance}
- def __call__(self, **kwargs):
- # We use **kwargs rather than a kwarg argument to enforce the
- # `manager='manager_name'` syntax.
- manager = getattr(self.model, kwargs.pop('manager'))
+ def __call__(self, *, manager):
+ manager = getattr(self.model, manager)
manager_class = create_reverse_many_to_one_manager(manager.__class__, rel)
return manager_class(self.instance)
do_not_call_in_templates = True
@@ -569,9 +567,8 @@ def create_reverse_many_to_one_manager(superclass, rel):
cache_name = self.field.related_query_name()
return queryset, rel_obj_attr, instance_attr, False, cache_name
- def add(self, *objs, **kwargs):
+ def add(self, *objs, bulk=True):
self._remove_prefetched_objects()
- bulk = kwargs.pop('bulk', True)
objs = list(objs)
db = router.db_for_write(self.model, instance=self.instance)
@@ -622,10 +619,9 @@ def create_reverse_many_to_one_manager(superclass, rel):
# remove() and clear() are only provided if the ForeignKey can have a value of null.
if rel.field.null:
- def remove(self, *objs, **kwargs):
+ def remove(self, *objs, bulk=True):
if not objs:
return
- bulk = kwargs.pop('bulk', True)
val = self.field.get_foreign_related_value(self.instance)
old_ids = set()
for obj in objs:
@@ -639,8 +635,7 @@ def create_reverse_many_to_one_manager(superclass, rel):
self._clear(self.filter(pk__in=old_ids), bulk)
remove.alters_data = True
- def clear(self, **kwargs):
- bulk = kwargs.pop('bulk', True)
+ def clear(self, *, bulk=True):
self._clear(self, bulk)
clear.alters_data = True
@@ -658,14 +653,11 @@ def create_reverse_many_to_one_manager(superclass, rel):
obj.save(update_fields=[self.field.name])
_clear.alters_data = True
- def set(self, objs, **kwargs):
+ def set(self, objs, *, bulk=True, clear=False):
# Force evaluation of `objs` in case it's a queryset whose value
# could be affected by `manager.clear()`. Refs #19816.
objs = tuple(objs)
- bulk = kwargs.pop('bulk', True)
- clear = kwargs.pop('clear', False)
-
if self.field.null:
db = router.db_for_write(self.model, instance=self.instance)
with transaction.atomic(using=db, savepoint=False):
@@ -791,10 +783,8 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
"a many-to-many relationship can be used." %
instance.__class__.__name__)
- def __call__(self, **kwargs):
- # We use **kwargs rather than a kwarg argument to enforce the
- # `manager='manager_name'` syntax.
- manager = getattr(self.model, kwargs.pop('manager'))
+ def __call__(self, *, manager):
+ manager = getattr(self.model, manager)
manager_class = create_forward_many_to_many_manager(manager.__class__, rel, reverse)
return manager_class(instance=self.instance)
do_not_call_in_templates = True
@@ -924,7 +914,7 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
)
clear.alters_data = True
- def set(self, objs, **kwargs):
+ def set(self, objs, *, clear=False):
if not rel.through._meta.auto_created:
opts = self.through._meta
raise AttributeError(
@@ -937,8 +927,6 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
# could be affected by `manager.clear()`. Refs #19816.
objs = tuple(objs)
- clear = kwargs.pop('clear', False)
-
db = router.db_for_write(self.through, instance=self.instance)
with transaction.atomic(using=db, savepoint=False):
if clear: