Opened 2 years ago
Last modified 2 years ago
#34001 closed Cleanup/optimization
ForeignKey.formfield(): allow override for all kwargs — at Version 1
Reported by: | James Pic | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 4.0 |
Severity: | Normal | Keywords: | |
Cc: | James Pic | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Proposing this:
commit ec0cae2e2d0bc6ae31cf39e7c4a067810cff8fb4 (HEAD -> main, origin/formfield) Author: jpic <jpic@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)
Also an optimization.
Change History (1)
comment:1 by , 2 years ago
Cc: | added |
---|---|
Component: | Uncategorized → Database layer (models, ORM) |
Description: | modified (diff) |
Type: | Uncategorized → Cleanup/optimization |
Note:
See TracTickets
for help on using tickets.