Exemplo n.º 1
0
def generic_inlineformset_factory(model, form=ModelForm,
                                  formset=BaseGenericInlineFormSet,
                                  ct_field="content_type", fk_field="object_id",
                                  fields=None, exclude=None,
                                  extra=3, can_order=False, can_delete=True,
                                  max_num=None,
                                  formfield_callback=None):
    """
    Returns an ``GenericInlineFormSet`` for the given kwargs.

    You must provide ``ct_field`` and ``object_id`` if they different from the
    defaults ``content_type`` and ``object_id`` respectively.
    """
    opts = model._meta
    # Avoid a circular import.
    from djangocg.contrib.contenttypes.models import ContentType
    # if there is no field called `ct_field` let the exception propagate
    ct_field = opts.get_field(ct_field)
    if not isinstance(ct_field, models.ForeignKey) or ct_field.rel.to != ContentType:
        raise Exception("fk_name '%s' is not a ForeignKey to ContentType" % ct_field)
    fk_field = opts.get_field(fk_field) # let the exception propagate
    if exclude is not None:
        exclude = list(exclude)
        exclude.extend([ct_field.name, fk_field.name])
    else:
        exclude = [ct_field.name, fk_field.name]
    FormSet = modelformset_factory(model, form=form,
                                   formfield_callback=formfield_callback,
                                   formset=formset,
                                   extra=extra, can_delete=can_delete, can_order=can_order,
                                   fields=fields, exclude=exclude, max_num=max_num)
    FormSet.ct_field = ct_field
    FormSet.ct_fk_field = fk_field
    return FormSet
Exemplo n.º 2
0
 def test_empty_fields_on_modelformset(self):
     "No fields passed to modelformset_factory should result in no fields on returned forms except for the id. See #14119."
     UserFormSet = modelformset_factory(User, fields=())
     formset = UserFormSet()
     for form in formset.forms:
         self.assertTrue('id' in form.fields)
         self.assertEqual(len(form.fields), 1)
Exemplo n.º 3
0
 def test_extraneous_query_is_not_run(self):
     Formset = modelformset_factory(Network)
     data = {'test-TOTAL_FORMS': '1',
             'test-INITIAL_FORMS': '0',
             'test-MAX_NUM_FORMS': '',
             'test-0-name': 'Random Place', }
     with self.assertNumQueries(1):
         formset = Formset(data, prefix="test")
         formset.save()
Exemplo n.º 4
0
 def test_error_class(self):
     '''
     Test the type of Formset and Form error attributes
     '''
     Formset = modelformset_factory(User)
     data = {
         'form-TOTAL_FORMS': '2',
         'form-INITIAL_FORMS': '0',
         'form-MAX_NUM_FORMS': '0',
         'form-0-id': '',
         'form-0-username': '******',
         'form-0-serial': '1',
         'form-1-id': '',
         'form-1-username': '******',
         'form-1-serial': '2',
     }
     formset = Formset(data)
     # check if the returned error classes are correct
     # note: formset.errors returns a list as documented
     self.assertTrue(isinstance(formset.errors, list))
     self.assertTrue(isinstance(formset.non_form_errors(), ErrorList))
     for form in formset.forms:
         self.assertTrue(isinstance(form.errors, ErrorDict))
         self.assertTrue(isinstance(form.non_field_errors(), ErrorList))
Exemplo n.º 5
0
 def test_modelformset_custom_callback(self):
     callback = Callback()
     modelformset_factory(UserSite, form=UserSiteForm,
                          formfield_callback=callback)
     self.assertCallbackCalled(callback)
Exemplo n.º 6
0
 def test_modelformset_factory_default(self):
     Formset = modelformset_factory(UserSite, form=UserSiteForm)
     form = Formset().forms[0]
     self.assertTrue(isinstance(form['data'].field.widget, CustomWidget))
Exemplo n.º 7
0
        c = Context({
            'form_list': [x.cleaned_data for x in form_list],
            'all_cleaned_data': self.get_all_cleaned_data(),
        })

        for form in self.form_list.keys():
            c[form] = self.get_cleaned_data_for_step(form)

        c['this_will_fail'] = self.get_cleaned_data_for_step('this_will_fail')
        return HttpResponse(Template('').render(c))

    def get_context_data(self, form, **kwargs):
        context = super(ContactWizard, self).get_context_data(form, **kwargs)
        if self.storage.current_step == 'form2':
            context.update({'another_var': True})
        return context

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email')

UserFormSet = modelformset_factory(User, form=UserForm)

class SessionContactWizard(ContactWizard):
    storage_name = 'djangocg.contrib.formtools.wizard.storage.session.SessionStorage'

class CookieContactWizard(ContactWizard):
    storage_name = 'djangocg.contrib.formtools.wizard.storage.cookie.CookieStorage'

Exemplo n.º 8
-1
 def test_initial_data(self):
     User.objects.create(username="******", serial=1)
     Formset = modelformset_factory(User, extra=2)
     formset = Formset(initial=[{'username': '******'}, {'username': '******'}])
     self.assertEqual(formset.forms[0].initial['username'], "bibi")
     self.assertEqual(formset.extra_forms[0].initial['username'], "apollo11")
     self.assertTrue('value="apollo12"' in formset.extra_forms[1].as_p())