瀏覽代碼

Fixed #35913 -- Prevented formset name suffix 'FormFormSet'.

antoliny0919 4 月之前
父節點
當前提交
f60d5e46e1
共有 2 個文件被更改,包括 12 次插入1 次删除
  1. 6 1
      django/forms/formsets.py
  2. 6 0
      tests/forms_tests/tests/test_formsets.py

+ 6 - 1
django/forms/formsets.py

@@ -570,7 +570,12 @@ def formset_factory(
         "validate_max": validate_max,
         "renderer": renderer,
     }
-    return type(form.__name__ + "FormSet", (formset,), attrs)
+    form_name = form.__name__
+    if form_name.endswith("Form"):
+        formset_name = form_name + "Set"
+    else:
+        formset_name = form_name + "FormSet"
+    return type(formset_name, (formset,), attrs)
 
 
 def all_valid(formsets):

+ 6 - 0
tests/forms_tests/tests/test_formsets.py

@@ -149,6 +149,12 @@ class FormsFormsetTestCase(SimpleTestCase):
         self.assertFalse(formset.is_valid())
         self.assertFalse(formset.has_changed())
 
+    def test_formset_name(self):
+        ArticleFormSet = formset_factory(ArticleForm)
+        ChoiceFormSet = formset_factory(Choice)
+        self.assertEqual(ArticleFormSet.__name__, "ArticleFormSet")
+        self.assertEqual(ChoiceFormSet.__name__, "ChoiceFormSet")
+
     def test_form_kwargs_formset(self):
         """
         Custom kwargs set on the formset instance are passed to the