Opened 5 months ago
Closed 5 months ago
#35913 closed Cleanup/optimization (fixed)
About the FormSet class name generated through the formset_factory.
Description ¶
When you define Django Form, what format do you usually name it?
In my case, I usually name it "xxxForm".
The names of the forms used as examples in official documents related to Django Form are the same as my name define format.
# Working with forms docs. class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField(widget=forms.Textarea) sender = forms.EmailField() cc_myself = forms.BooleanField(required=False) # Working with forms docs. class ArticleForm(forms.Form): title = forms.CharField() pub_date = forms.DateField() # FormField docs. class CommentForm(forms.Form): name = forms.CharField() url = forms.URLField() comment = forms.CharField()
The way django people name it may be based on the developers' tendencies or tastes, but I think most of them are built in the format as xxxForm.
The FormSet class I created by passing xxxForm name format to the formset_factory is named as follows.
>>> ArticleFormSet = formset_factory(ArticleForm) >>> ArticleFormSet.__name__ 'ArticleFormFormSet'
The name of the FormSet class created through the formset_factory in the form xxxForm name format is a little strange.
This is because when formset_factory creates a class through type, it adds a static "FormSet" to the form name.
def formset_factory( form, formset=BaseFormSet, extra=1, can_order=False, can_delete=False, max_num=None, validate_max=False, min_num=None, validate_min=False, absolute_max=None, can_delete_extra=True, renderer=None, ): ... return type(form.__name__ + "FormSet", (formset,), attrs)
I wonder if the format of these names is intended :)
Change History (11)
comment:1 by , 5 months ago
Owner: | set to |
---|---|
Status: | new → assigned |
comment:2 by , 5 months ago
comment:3 by , 5 months ago
Thank you for your good opinion @Tim Graham !
It was not found because we tested it through Choice
in the test.
I agree to change "FormSet" to "Set".
comment:4 by , 5 months ago
Has patch: | set |
---|---|
Needs documentation: | set |
Needs tests: | set |
comment:6 by , 5 months ago
Needs documentation: | unset |
---|---|
Needs tests: | unset |
comment:7 by , 5 months ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:8 by , 5 months ago
Patch needs improvement: | set |
---|
comment:9 by , 5 months ago
Patch needs improvement: | unset |
---|
comment:10 by , 5 months ago
Triage Stage: | Accepted → Ready for checkin |
---|
I agree this is a bit odd. The test for the
Formset.__repr__()
uses a form calledChoice
so the result isChoiceFormSet
as expected.As you pointed out, perhaps to match the documented convention of ending all form names with "Form" we could consider appending "Set" rather than "FormSet" if
form.__name__
ends withForm
. I can't think of any way this would break backward compatibility, and it might make debugging a little less confusing.