Python django.forms.models.inlineformset_factory() Examples
The following are 30
code examples of django.forms.models.inlineformset_factory().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
django.forms.models
, or try the search function
.
Example #1
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 8 votes |
def test_deletion(self): PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True, fields="__all__") poet = Poet.objects.create(name='test') poem = poet.poem_set.create(name='test poem') data = { 'poem_set-TOTAL_FORMS': '1', 'poem_set-INITIAL_FORMS': '1', 'poem_set-MAX_NUM_FORMS': '0', 'poem_set-0-id': str(poem.pk), 'poem_set-0-poet': str(poet.pk), 'poem_set-0-name': 'test', 'poem_set-0-DELETE': 'on', } formset = PoemFormSet(data, instance=poet) formset.save() self.assertTrue(formset.is_valid()) self.assertEqual(Poem.objects.count(), 0)
Example #2
Source File: views.py From django-flexible-subscriptions with GNU General Public License v3.0 | 6 votes |
def post(self, request, *args, **kwargs): """Overriding post method to handle inline formsets.""" # Setup the formset for PlanCost PlanCostFormSet = inlineformset_factory( # pylint: disable=invalid-name parent_model=models.SubscriptionPlan, model=models.PlanCost, form=forms.PlanCostForm, can_delete=True, extra=1, ) self.object = self.get_object() form = self.get_form(self.get_form_class()) cost_forms = PlanCostFormSet(self.request.POST, instance=self.object) if form.is_valid() and cost_forms.is_valid(): return self.form_valid(form, cost_forms) return self.form_invalid(form, cost_forms)
Example #3
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 6 votes |
def test_deletion(self): PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True, fields="__all__") poet = Poet.objects.create(name='test') poem = poet.poem_set.create(name='test poem') data = { 'poem_set-TOTAL_FORMS': '1', 'poem_set-INITIAL_FORMS': '1', 'poem_set-MAX_NUM_FORMS': '0', 'poem_set-0-id': str(poem.pk), 'poem_set-0-poet': str(poet.pk), 'poem_set-0-name': 'test', 'poem_set-0-DELETE': 'on', } formset = PoemFormSet(data, instance=poet) formset.save() self.assertTrue(formset.is_valid()) self.assertEqual(Poem.objects.count(), 0)
Example #4
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 6 votes |
def test_save_new(self): """ Make sure inlineformsets respect commit=False regression for #10750 """ # exclude some required field from the forms ChildFormSet = inlineformset_factory(School, Child, exclude=['father', 'mother']) school = School.objects.create(name='test') mother = Parent.objects.create(name='mother') father = Parent.objects.create(name='father') data = { 'child_set-TOTAL_FORMS': '1', 'child_set-INITIAL_FORMS': '0', 'child_set-MAX_NUM_FORMS': '0', 'child_set-0-name': 'child', } formset = ChildFormSet(data, instance=school) self.assertIs(formset.is_valid(), True) objects = formset.save(commit=False) for obj in objects: obj.mother = mother obj.father = father obj.save() self.assertEqual(school.child_set.count(), 1)
Example #5
Source File: views.py From django-flexible-subscriptions with GNU General Public License v3.0 | 6 votes |
def get(self, request, *args, **kwargs): """Overriding get method to handle inline formset.""" # Setup the formset for PlanCost PlanCostFormSet = inlineformset_factory( # pylint: disable=invalid-name parent_model=models.SubscriptionPlan, model=models.PlanCost, form=forms.PlanCostForm, can_delete=True, extra=1, ) self.object = self.get_object() form = self.get_form(self.get_form_class()) cost_forms = PlanCostFormSet(instance=self.object) return self.render_to_response( self.get_context_data( form=form, cost_forms=cost_forms, ) )
Example #6
Source File: views.py From django-flexible-subscriptions with GNU General Public License v3.0 | 6 votes |
def post(self, request, *args, **kwargs): """Overriding post method to handle inline formsets.""" # Setup the formset for PlanCost PlanCostFormSet = inlineformset_factory( # pylint: disable=invalid-name parent_model=models.SubscriptionPlan, model=models.PlanCost, form=forms.PlanCostForm, can_delete=False, extra=1, ) self.object = None form = self.get_form(self.get_form_class()) cost_forms = PlanCostFormSet(self.request.POST) if form.is_valid() and cost_forms.is_valid(): return self.form_valid(form, cost_forms) return self.form_invalid(form, cost_forms)
Example #7
Source File: views.py From django-flexible-subscriptions with GNU General Public License v3.0 | 6 votes |
def get(self, request, *args, **kwargs): """Overriding get method to handle inline formset.""" # Setup the formset for PlanCost PlanCostFormSet = inlineformset_factory( # pylint: disable=invalid-name parent_model=models.SubscriptionPlan, model=models.PlanCost, form=forms.PlanCostForm, can_delete=False, extra=1, ) self.object = None form = self.get_form(self.get_form_class()) cost_forms = PlanCostFormSet() return self.render_to_response( self.get_context_data( form=form, cost_forms=cost_forms, ) )
Example #8
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 6 votes |
def test_save_new(self): """ Make sure inlineformsets respect commit=False regression for #10750 """ # exclude some required field from the forms ChildFormSet = inlineformset_factory(School, Child, exclude=['father', 'mother']) school = School.objects.create(name='test') mother = Parent.objects.create(name='mother') father = Parent.objects.create(name='father') data = { 'child_set-TOTAL_FORMS': '1', 'child_set-INITIAL_FORMS': '0', 'child_set-MAX_NUM_FORMS': '0', 'child_set-0-name': 'child', } formset = ChildFormSet(data, instance=school) self.assertIs(formset.is_valid(), True) objects = formset.save(commit=False) for obj in objects: obj.mother = mother obj.father = father obj.save() self.assertEqual(school.child_set.count(), 1)
Example #9
Source File: __init__.py From astrobin with GNU Affero General Public License v3.0 | 6 votes |
def user_profile_save_locations(request): profile = request.user.userprofile LocationsFormset = inlineformset_factory( UserProfile, Location, form=LocationEditForm, extra=1) formset = LocationsFormset(data=request.POST, instance=profile) if not formset.is_valid(): messages.error(request, _("There was one or more errors processing the form. You may need to scroll down to see them.")) return render(request, 'user/profile/edit/locations.html', { 'formset': formset, 'profile': profile, }) formset.save() messages.success(request, _("Form saved. Thank you!")) return HttpResponseRedirect('/profile/edit/locations/')
Example #10
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_unsaved_fk_validate_unique(self): poet = Poet(name='unsaved') PoemFormSet = inlineformset_factory(Poet, Poem, fields=['name']) data = { 'poem_set-TOTAL_FORMS': '2', 'poem_set-INITIAL_FORMS': '0', 'poem_set-MAX_NUM_FORMS': '2', 'poem_set-0-name': 'Poem', 'poem_set-1-name': 'Poem', } formset = PoemFormSet(data, instance=poet) self.assertFalse(formset.is_valid()) self.assertEqual(formset.non_form_errors(), ['Please correct the duplicate data for name.'])
Example #11
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_any_iterable_allowed_as_argument_to_exclude(self): # Regression test for #9171. inlineformset_factory( Parent, Child, exclude=['school'], fk_name='mother' ) inlineformset_factory( Parent, Child, exclude=('school',), fk_name='mother' )
Example #12
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_fk_in_all_formset_forms(self): """ A foreign key field is in Meta for all forms in the formset (#26538). """ class PoemModelForm(ModelForm): def __init__(self, *args, **kwargs): assert 'poet' in self._meta.fields super().__init__(*args, **kwargs) poet = Poet.objects.create(name='test') poet.poem_set.create(name='first test poem') poet.poem_set.create(name='second test poem') PoemFormSet = inlineformset_factory(Poet, Poem, form=PoemModelForm, fields=('name',), extra=0) formset = PoemFormSet(None, instance=poet) formset.forms # Trigger form instantiation to run the assert above.
Example #13
Source File: test_uuid.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_inlineformset_factory_nulls_default_pks(self): """ #24377 - If we're adding a new object, a parent's auto-generated pk from the model field default should be ignored as it's regenerated on the save request. Tests the case where both the parent and child have a UUID primary key. """ FormSet = inlineformset_factory(UUIDPKParent, UUIDPKChild, fields='__all__') formset = FormSet() self.assertIsNone(formset.forms[0].fields['parent'].initial)
Example #14
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_zero_primary_key(self): # Regression test for #21472 poet = Poet.objects.create(id=0, name='test') poet.poem_set.create(name='test poem') PoemFormSet = inlineformset_factory(Poet, Poem, fields="__all__", extra=0) formset = PoemFormSet(None, instance=poet) self.assertEqual(len(formset.forms), 1)
Example #15
Source File: test_uuid.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_inlineformset_factory_ignores_default_pks_on_submit(self): """ #24377 - Inlines with a model field default should ignore that default value to avoid triggering validation on empty forms. """ FormSet = inlineformset_factory(UUIDPKParent, UUIDPKChild, fields='__all__') formset = FormSet({ 'uuidpkchild_set-TOTAL_FORMS': 3, 'uuidpkchild_set-INITIAL_FORMS': 0, 'uuidpkchild_set-MAX_NUM_FORMS': '', 'uuidpkchild_set-0-name': 'Foo', 'uuidpkchild_set-1-name': '', 'uuidpkchild_set-2-name': '', }) self.assertTrue(formset.is_valid())
Example #16
Source File: test_uuid.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_inlineformset_factory_nulls_default_pks_uuid_parent_auto_child(self): """ #24958 - Variant of test_inlineformset_factory_nulls_default_pks for the case of a parent object with a UUID primary key and a child object with an AutoField primary key. """ FormSet = inlineformset_factory(UUIDPKParent, AutoPKChildOfUUIDPKParent, fields='__all__') formset = FormSet() self.assertIsNone(formset.forms[0].fields['parent'].initial)
Example #17
Source File: test_uuid.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_inlineformset_factory_nulls_default_pks_auto_parent_uuid_child(self): """ #24958 - Variant of test_inlineformset_factory_nulls_default_pks for the case of a parent object with an AutoField primary key and a child object with a UUID primary key. """ FormSet = inlineformset_factory(AutoPKParent, UUIDPKChildOfAutoPKParent, fields='__all__') formset = FormSet() self.assertIsNone(formset.forms[0].fields['parent'].initial)
Example #18
Source File: test_uuid.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_inlineformset_factory_nulls_default_pks_alternate_key_relation(self): """ #24958 - Variant of test_inlineformset_factory_nulls_default_pks for the case of a parent object with a UUID alternate key and a child object that relates to that alternate key. """ FormSet = inlineformset_factory(ParentWithUUIDAlternateKey, ChildRelatedViaAK, fields='__all__') formset = FormSet() self.assertIsNone(formset.forms[0].fields['parent'].initial)
Example #19
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_inline_formset_factory(self): """ These should both work without a problem. """ inlineformset_factory(Parent, Child, fk_name='mother', fields="__all__") inlineformset_factory(Parent, Child, fk_name='father', fields="__all__")
Example #20
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_add_form_deletion_when_invalid(self): """ Make sure that an add form that is filled out, but marked for deletion doesn't cause validation errors. """ PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True, fields="__all__") poet = Poet.objects.create(name='test') data = { 'poem_set-TOTAL_FORMS': '1', 'poem_set-INITIAL_FORMS': '0', 'poem_set-MAX_NUM_FORMS': '0', 'poem_set-0-id': '', 'poem_set-0-poem': '1', 'poem_set-0-name': 'x' * 1000, } formset = PoemFormSet(data, instance=poet) # Make sure this form doesn't pass validation. self.assertIs(formset.is_valid(), False) self.assertEqual(Poem.objects.count(), 0) # Then make sure that it *does* pass validation and delete the object, # even though the data isn't actually valid. data['poem_set-0-DELETE'] = 'on' formset = PoemFormSet(data, instance=poet) self.assertIs(formset.is_valid(), True) formset.save() self.assertEqual(Poem.objects.count(), 0)
Example #21
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_change_form_deletion_when_invalid(self): """ Make sure that a change form that is filled out, but marked for deletion doesn't cause validation errors. """ PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True, fields="__all__") poet = Poet.objects.create(name='test') poem = poet.poem_set.create(name='test poem') data = { 'poem_set-TOTAL_FORMS': '1', 'poem_set-INITIAL_FORMS': '1', 'poem_set-MAX_NUM_FORMS': '0', 'poem_set-0-id': str(poem.id), 'poem_set-0-poem': str(poem.id), 'poem_set-0-name': 'x' * 1000, } formset = PoemFormSet(data, instance=poet) # Make sure this form doesn't pass validation. self.assertIs(formset.is_valid(), False) self.assertEqual(Poem.objects.count(), 1) # Then make sure that it *does* pass validation and delete the object, # even though the data isn't actually valid. data['poem_set-0-DELETE'] = 'on' formset = PoemFormSet(data, instance=poet) self.assertIs(formset.is_valid(), True) formset.save() self.assertEqual(Poem.objects.count(), 0)
Example #22
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_exception_on_unspecified_foreign_key(self): """ Child has two ForeignKeys to Parent, so if we don't specify which one to use for the inline formset, we should get an exception. """ msg = "'inline_formsets.Child' has more than one ForeignKey to 'inline_formsets.Parent'." with self.assertRaisesMessage(ValueError, msg): inlineformset_factory(Parent, Child)
Example #23
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_fk_name_not_foreign_key_field_from_child(self): """ If we specify fk_name, but it isn't a ForeignKey from the child model to the parent model, we should get an exception. """ msg = "fk_name 'school' is not a ForeignKey to 'inline_formsets.Parent'." with self.assertRaisesMessage(ValueError, msg): inlineformset_factory(Parent, Child, fk_name='school')
Example #24
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_non_foreign_key_field(self): """ If the field specified in fk_name is not a ForeignKey, we should get an exception. """ with self.assertRaisesMessage(ValueError, "'inline_formsets.Child' has no field named 'test'."): inlineformset_factory(Parent, Child, fk_name='test')
Example #25
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_any_iterable_allowed_as_argument_to_exclude(self): # Regression test for #9171. inlineformset_factory( Parent, Child, exclude=['school'], fk_name='mother' ) inlineformset_factory( Parent, Child, exclude=('school',), fk_name='mother' )
Example #26
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_zero_primary_key(self): # Regression test for #21472 poet = Poet.objects.create(id=0, name='test') poet.poem_set.create(name='test poem') PoemFormSet = inlineformset_factory(Poet, Poem, fields="__all__", extra=0) formset = PoemFormSet(None, instance=poet) self.assertEqual(len(formset.forms), 1)
Example #27
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_fk_not_duplicated_in_form_fields(self): """ A foreign key name isn't duplicated in form._meta fields (#21332). """ poet = Poet.objects.create(name='test') poet.poem_set.create(name='first test poem') poet.poem_set.create(name='second test poem') poet.poem_set.create(name='third test poem') PoemFormSet = inlineformset_factory(Poet, Poem, fields=('name',), extra=0) formset = PoemFormSet(None, instance=poet) self.assertEqual(len(formset.forms), 3) self.assertEqual(['name', 'poet'], PoemFormSet.form._meta.fields)
Example #28
Source File: tests.py From djongo with GNU Affero General Public License v3.0 | 5 votes |
def test_fk_in_all_formset_forms(self): """ A foreign key field is in Meta for all forms in the formset (#26538). """ class PoemModelForm(ModelForm): def __init__(self, *args, **kwargs): assert 'poet' in self._meta.fields super().__init__(*args, **kwargs) poet = Poet.objects.create(name='test') poet.poem_set.create(name='first test poem') poet.poem_set.create(name='second test poem') PoemFormSet = inlineformset_factory(Poet, Poem, form=PoemModelForm, fields=('name',), extra=0) formset = PoemFormSet(None, instance=poet) formset.forms # Trigger form instantiation to run the assert above.
Example #29
Source File: inline.py From ImitationTmall_Django with GNU General Public License v3.0 | 5 votes |
def get_formset(self, **kwargs): """Returns a BaseInlineFormSet class for use in admin add/change views.""" if self.exclude is None: exclude = [] else: exclude = list(self.exclude) exclude.extend(self.get_readonly_fields()) if self.exclude is None and hasattr(self.form, '_meta') and self.form._meta.exclude: # Take the custom ModelForm's Meta.exclude into account only if the # InlineModelAdmin doesn't define its own. exclude.extend(self.form._meta.exclude) # if exclude is an empty list we use None, since that's the actual # default exclude = exclude or None can_delete = self.can_delete and self.has_delete_permission() defaults = { "form": self.form, "formset": self.formset, "fk_name": self.fk_name, 'fields': forms.ALL_FIELDS, "exclude": exclude, "formfield_callback": self.formfield_for_dbfield, "extra": self.extra, "max_num": self.max_num, "can_delete": can_delete, } defaults.update(kwargs) return inlineformset_factory(self.parent_model, self.model, **defaults)
Example #30
Source File: fields.py From django-superform with BSD 3-Clause "New" or "Revised" License | 5 votes |
def __init__(self, parent_model=None, model=None, formset_class=None, kwargs=None, **factory_kwargs): """ You need to either provide the ``formset_class`` or the ``model`` argument. If the ``formset_class`` argument is not given, the ``model`` argument is used to create the formset_class on the fly when needed by using the ``inlineformset_factory``. """ # Make sure that all standard arguments will get passed through to the # parent's __init__ method. field_kwargs = {} for arg in ['required', 'widget', 'label', 'help_text', 'localize']: if arg in factory_kwargs: field_kwargs[arg] = factory_kwargs.pop(arg) self.parent_model = parent_model self.model = model self.formset_factory_kwargs = factory_kwargs super(InlineFormSetField, self).__init__(formset_class, kwargs=kwargs, **field_kwargs) if ( self.formset_class is None and 'form' not in self.formset_factory_kwargs and 'fields' not in self.formset_factory_kwargs and 'exclude' not in self.formset_factory_kwargs): raise ValueError( 'You need to either specify the `formset_class` argument or ' 'one of `form`/`fields`/`exclude` arguments ' 'when creating a {0}.' .format(self.__class__.__name__))