{{{
commit ec0cae2e2d0bc6ae31cf39e7c4a067810cff8fb4 (HEAD -> main,
origin/formfield)
Author: jpic <jp...@yourlabs.org>
Date: Sat Sep 10 00:47:17 2022 +0200
ForeignKey.formfield(): set defaults if necessary (allow override)
Allow to override defaults used by formfield() in ForeignKey
subclasses.
diff --git a/django/db/models/fields/related.py
b/django/db/models/fields/related.py
index 63ed2ff4c7..f9c6ff3be8 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -1164,15 +1164,21 @@ class ForeignKey(ForeignObject):
"its related model %r has not been loaded yet"
% (self.name, self.remote_field.model)
)
- return super().formfield(
- **{
- "form_class": forms.ModelChoiceField,
- "queryset":
self.remote_field.model._default_manager.using(using),
- "to_field_name": self.remote_field.field_name,
- **kwargs,
- "blank": self.blank,
- }
- )
+
+ if "form_class" not in kwargs:
+ kwargs["form_class"] = forms.ModelChoiceField
+
+ if "queryset" not in kwargs:
+ kwargs["queryset"] =
self.remote_field.model._default_manager.using(
+ using)
+
+ if "to_field_name" not in kwargs:
+ kwargs["to_field_name"] = self.remote_field.field_name
+
+ if "blank" not in kwargs:
+ kwargs["blank"] = self.blank
+
+ return super().formfield(**kwargs)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/34001>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* cc: James Pic (added)
* type: Uncategorized => Cleanup/optimization
* component: Uncategorized => Database layer (models, ORM)
Old description:
> Proposing this:
>
New description:
Proposing this:
Also an optimization.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/34001#comment:1>
Old description:
> Proposing this:
>
> Also an optimization.
New description:
Proposing to change ForeignKey.formfield() to allow overriding form_class
and all other defaults like with other fields such as fields.UUIDField, we
can optimize the code at the same time.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/34001#comment:2>
* status: new => closed
* resolution: => needsinfo
Comment:
Thanks for the ticket, however I'm a bit confused. Is it not possible? The
values from `kwargs` should override `form_class`, `queryset`, and
`to_field_name` in `**{..., **kwargs}`. The only difference is in `blank`
but in this case we should keep the value from a model field.
--
Ticket URL: <https://code.djangoproject.com/ticket/34001#comment:3>
Comment (by James Pic):
You are correct, my bad, should have went to sleep instead :P
--
Ticket URL: <https://code.djangoproject.com/ticket/34001#comment:4>
* resolution: needsinfo => fixed
--
Ticket URL: <https://code.djangoproject.com/ticket/34001#comment:5>
* resolution: fixed => invalid
--
Ticket URL: <https://code.djangoproject.com/ticket/34001#comment:6>