示例#1
0
    def test_formset_factory_no_fields_exclude(self):
        with self.assertRaises(ImproperlyConfigured) as ctx:
            modelformset_factory(Owner, fields=None, exclude=None, session=db)

        self.assertEqual(
            ctx.exception.args,
            ("Calling modelformset_factory without defining 'fields' or "
             "'exclude' explicitly is prohibited.", ),
        )
示例#2
0
    def test_factory(self):
        formset_class = modelformset_factory(Owner,
                                             fields=ALL_FIELDS,
                                             session=db)
        formset = formset_class()

        self.assertEqual(formset.model, Owner)
        self.assertEqual(formset.session, db)
示例#3
0
 def test_save_no_initial_forms(self):
     formset_class = modelformset_factory(Owner,
                                          fields=("first_name",
                                                  "last_name"),
                                          session=db,
                                          extra=0)
     formset = formset_class(queryset=Owner.query.filter_by(id=99))
     self.assertEqual(formset.save(), [])
示例#4
0
    def test_no_queryset(self):
        formset_class = modelformset_factory(Owner,
                                             fields=("first_name",
                                                     "last_name"),
                                             session=db)
        formset = formset_class()

        self.assertIsNone(formset.queryset)
        self.assertListEqual(formset.get_queryset(), Owner.query.all())
示例#5
0
    def test_initial_extra(self):
        formset_class = modelformset_factory(Owner,
                                             fields="__all__",
                                             session=db)

        initial = [{"last_name": "test"}, None]

        formset = formset_class(queryset=Owner.query, initial=initial)
        extra_form = formset.forms[formset.initial_form_count()]

        self.assertEqual(extra_form.initial["last_name"], "test")
示例#6
0
    def test_bad_initial(self):
        formset_class = modelformset_factory(Owner,
                                             fields="__all__",
                                             session=db,
                                             extra=2)

        initial = [None]

        formset = formset_class(queryset=Owner.query, initial=initial)
        extra_form = formset.forms[formset.initial_form_count() + 1]

        self.assertEqual(extra_form.initial["first_name"], None)
        self.assertEqual(extra_form.initial["last_name"], None)
示例#7
0
    def test_edit(self):
        formset_class = modelformset_factory(Owner,
                                             fields=("first_name",
                                                     "last_name"),
                                             session=db)
        query = Owner.query

        data = {
            "form-TOTAL_FORMS": "5",
            "form-INITIAL_FORMS": "4",
            "form-MIN_NUM_FORMS": "0",
            "form-MAX_NUM_FORMS": "1000",
            "form-0-id": self.owners[0].id,
            "form-0-first_name":
            "Edited first name {}".format(self.owners[0].id),
            "form-0-last_name":
            "Edited last name {}".format(self.owners[0].id),
            "form-1-id": self.owners[1].id,
            "form-1-first_name":
            "Edited first name {}".format(self.owners[1].id),
            "form-1-last_name":
            "Edited last name {}".format(self.owners[1].id),
            "form-2-id": self.owners[2].id,
            "form-2-first_name":
            "Edited first name {}".format(self.owners[2].id),
            "form-2-last_name":
            "Edited last name {}".format(self.owners[2].id),
            "form-3-id": self.owners[3].id,
            "form-3-first_name":
            "Edited first name {}".format(self.owners[3].id),
            "form-3-last_name":
            "Edited last name {}".format(self.owners[3].id),
            "form-4-id": "",
            "form-4-first_name": "New first name",
            "form-4-last_name": "New last name",
        }

        formset = formset_class(queryset=query, data=data)
        self.assertTrue(formset.is_valid())
        instances = formset.save()
        db.expire_all()

        for owner in instances:
            if owner.first_name.startswith("Edited"):
                self.assertEqual(owner.first_name,
                                 "Edited first name {}".format(owner.id))
                self.assertEqual(owner.last_name,
                                 "Edited last name {}".format(owner.id))
            else:
                self.assertEqual(owner.first_name, "New first name")
                self.assertEqual(owner.last_name, "New last name")
示例#8
0
    def test_delete(self):
        formset_class = modelformset_factory(Owner,
                                             fields=("first_name",
                                                     "last_name"),
                                             session=db,
                                             can_delete=True)
        query = Owner.query

        data = {
            "form-TOTAL_FORMS": "5",
            "form-INITIAL_FORMS": "4",
            "form-MIN_NUM_FORMS": "0",
            "form-MAX_NUM_FORMS": "1000",
            "form-0-id": self.owners[0].id,
            "form-0-first_name":
            "Edited first name {}".format(self.owners[0].id),
            "form-0-last_name":
            "Edited last name {}".format(self.owners[0].id),
            "form-1-id": self.owners[1].id,
            "form-1-first_name":
            "Edited first name {}".format(self.owners[1].id),
            "form-1-last_name":
            "Edited last name {}".format(self.owners[1].id),
            "form-2-id": self.owners[2].id,
            "form-2-first_name":
            "Edited first name {}".format(self.owners[2].id),
            "form-2-last_name":
            "Edited last name {}".format(self.owners[2].id),
            "form-3-id": self.owners[3].id,
            "form-3-first_name":
            "Edited first name {}".format(self.owners[3].id),
            "form-3-last_name":
            "Edited last name {}".format(self.owners[3].id),
            "form-3-DELETE": "on",
            "form-4-id": "",
            "form-4-first_name": "",
            "form-4-last_name": "",
        }

        formset = formset_class(queryset=query, data=data)
        self.assertTrue(formset.is_valid())
        instances = formset.save()

        self.assertEqual(len(instances), 3)
        self.assertEqual(len(formset.deleted_objects), 1)
        self.assertEqual(Owner.query.count(), 3)
示例#9
0
    def test_edit_new_delete_ignore(self):
        formset_class = modelformset_factory(Owner,
                                             fields=("first_name",
                                                     "last_name"),
                                             session=db,
                                             can_delete=True)

        data = {
            "form-TOTAL_FORMS": "1",
            "form-INITIAL_FORMS": "0",
            "form-MIN_NUM_FORMS": "0",
            "form-MAX_NUM_FORMS": "1000",
            "form-0-first_name": "Edited first name 1",
            "form-0-last_name": "Edited last name 1",
            "form-0-DELETE": "on",
        }

        formset = formset_class(queryset=[], data=data)
        self.assertTrue(formset.is_valid())
        instances = formset.save()
        self.assertEqual(instances, [])
        self.assertEqual(formset.new_objects, [])
        self.assertEqual(formset.changed_objects, [])
        self.assertEqual(formset.deleted_objects, [])
示例#10
0
    def test_render(self):
        formset_class = modelformset_factory(Owner,
                                             fields=("first_name",
                                                     "last_name"),
                                             session=db)
        query = Owner.query

        formset = formset_class(queryset=query)

        self.assertEqual(len(formset.forms), 5)

        for form in formset.forms:
            form.order_fields(sorted(form.fields.keys()))

        soup = self.get_soup(formset.as_p())
        expected_soup = self.get_soup("".join([
            '<input type="hidden" name="form-TOTAL_FORMS" value="5" id="id_form-TOTAL_FORMS" />',
            '<input type="hidden" name="form-INITIAL_FORMS" value="4" id="id_form-INITIAL_FORMS" />',
            '<input type="hidden" name="form-MIN_NUM_FORMS" value="0" id="id_form-MIN_NUM_FORMS" />',
            '<input type="hidden" name="form-MAX_NUM_FORMS" value="1000" id="id_form-MAX_NUM_FORMS" />',
            "<p>",
            '  <label for="id_form-0-first_name">First name:</label>',
            '  <input type="text" name="form-0-first_name" id="id_form-0-first_name" value="Test 1" />',
            "</p>",
            "<p>",
            '  <label for="id_form-0-last_name">Last name:</label>',
            '  <input type="text" name="form-0-last_name" id="id_form-0-last_name" value="Owner 1" />',
            '  <input type="text" name="form-0-id" id="id_form-0-id" type="hidden" value="{}" />'
            .format(self.owners[0].id),
            "</p>",
            "<p>",
            '  <label for="id_form-1-first_name">First name:</label>',
            '  <input type="text" name="form-1-first_name" id="id_form-1-first_name" value="Test 2" />',
            "</p>",
            "<p>",
            '  <label for="id_form-1-last_name">Last name:</label>',
            '  <input type="text" name="form-1-last_name" id="id_form-1-last_name" value="Owner 2" />',
            '  <input type="text" name="form-1-id" id="id_form-1-id" type="hidden" value="{}" />'
            .format(self.owners[1].id),
            "</p>",
            "<p>",
            '  <label for="id_form-2-first_name">First name:</label>',
            '  <input type="text" name="form-2-first_name" id="id_form-2-first_name" value="Test 3" />',
            "</p>",
            "<p>",
            '  <label for="id_form-2-last_name">Last name:</label>',
            '  <input type="text" name="form-2-last_name" id="id_form-2-last_name" value="Owner 3" />',
            '  <input type="text" name="form-2-id" id="id_form-2-id" type="hidden" value="{}" />'
            .format(self.owners[2].id),
            "</p>",
            "<p>",
            '  <label for="id_form-3-first_name">First name:</label>',
            '  <input type="text" name="form-3-first_name" id="id_form-3-first_name" value="Test 4" />',
            "</p>",
            "<p>",
            '  <label for="id_form-3-last_name">Last name:</label>',
            '  <input type="text" name="form-3-last_name" id="id_form-3-last_name" value="Owner 4" />',
            '  <input type="text" name="form-3-id" id="id_form-3-id" type="hidden" value="{}" />'
            .format(self.owners[3].id),
            "</p>",
            "<p>",
            '  <label for="id_form-4-first_name">First name:</label>',
            '  <input type="text" name="form-4-first_name" id="id_form-4-first_name" />',
            "</p>",
            "<p>",
            '  <label for="id_form-4-last_name">Last name:</label>',
            '  <input type="text" name="form-4-last_name" id="id_form-4-last_name" />',
            "</p>",
        ]))
        self.assertHTMLEqual(soup.prettify(), expected_soup.prettify())