Fixed flake8 warnings.

This commit is contained in:
Tim Graham
2016-05-28 11:31:18 -04:00
parent 46b6839fb0
commit e0244cff08
9 changed files with 179 additions and 181 deletions

View File

@@ -20,7 +20,7 @@ docs:
$(MAKE) -C docs clean html $(MAKE) -C docs clean html
test: test:
@flake8 --ignore=W801,E128,E501,W402 formtools @flake8
@ coverage run `which django-admin.py` test tests @ coverage run `which django-admin.py` test tests
@coverage report @coverage report

View File

@@ -122,8 +122,8 @@ class WizardView(TemplateView):
return super(WizardView, cls).as_view(**initkwargs) return super(WizardView, cls).as_view(**initkwargs)
@classmethod @classmethod
def get_initkwargs(cls, form_list=None, initial_dict=None, def get_initkwargs(cls, form_list=None, initial_dict=None, instance_dict=None,
instance_dict=None, condition_dict=None, *args, **kwargs): condition_dict=None, *args, **kwargs):
""" """
Creates a dict with all needed parameters for the form wizard instances Creates a dict with all needed parameters for the form wizard instances
@@ -146,18 +146,22 @@ class WizardView(TemplateView):
will be called with the wizardview instance as the only argument. will be called with the wizardview instance as the only argument.
If the return value is true, the step's form will be used. If the return value is true, the step's form will be used.
""" """
kwargs.update({ kwargs.update({
'initial_dict': initial_dict or kwargs.pop('initial_dict', 'initial_dict': (
getattr(cls, 'initial_dict', None)) or {}, initial_dict or
'instance_dict': instance_dict or kwargs.pop('instance_dict', kwargs.pop('initial_dict', getattr(cls, 'initial_dict', None)) or {}
getattr(cls, 'instance_dict', None)) or {}, ),
'condition_dict': condition_dict or kwargs.pop('condition_dict', 'instance_dict': (
getattr(cls, 'condition_dict', None)) or {} instance_dict or
kwargs.pop('instance_dict', getattr(cls, 'instance_dict', None)) or {}
),
'condition_dict': (
condition_dict or
kwargs.pop('condition_dict', getattr(cls, 'condition_dict', None)) or {}
)
}) })
form_list = form_list or kwargs.pop('form_list', form_list = form_list or kwargs.pop('form_list', getattr(cls, 'form_list', None)) or []
getattr(cls, 'form_list', None)) or []
computed_form_list = OrderedDict() computed_form_list = OrderedDict()
@@ -186,7 +190,8 @@ class WizardView(TemplateView):
not hasattr(cls, 'file_storage')): not hasattr(cls, 'file_storage')):
raise NoFileStorageConfigured( raise NoFileStorageConfigured(
"You need to define 'file_storage' in your " "You need to define 'file_storage' in your "
"wizard view in order to handle file uploads.") "wizard view in order to handle file uploads."
)
# build the kwargs for the wizardview instances # build the kwargs for the wizardview instances
kwargs['form_list'] = computed_form_list kwargs['form_list'] = computed_form_list
@@ -231,8 +236,10 @@ class WizardView(TemplateView):
""" """
# add the storage engine to the current wizardview instance # add the storage engine to the current wizardview instance
self.prefix = self.get_prefix(request, *args, **kwargs) self.prefix = self.get_prefix(request, *args, **kwargs)
self.storage = get_storage(self.storage_name, self.prefix, request, self.storage = get_storage(
getattr(self, 'file_storage', None)) self.storage_name, self.prefix, request,
getattr(self, 'file_storage', None),
)
self.steps = StepsHelper(self) self.steps = StepsHelper(self)
response = super(WizardView, self).dispatch(request, *args, **kwargs) response = super(WizardView, self).dispatch(request, *args, **kwargs)
@@ -289,10 +296,8 @@ class WizardView(TemplateView):
# and try to validate # and try to validate
if form.is_valid(): if form.is_valid():
# if the form is valid, store the cleaned data and files. # if the form is valid, store the cleaned data and files.
self.storage.set_step_data(self.steps.current, self.storage.set_step_data(self.steps.current, self.process_step(form))
self.process_step(form)) self.storage.set_step_files(self.steps.current, self.process_step_files(form))
self.storage.set_step_files(self.steps.current,
self.process_step_files(form))
# check if the current step is the last step # check if the current step is the last step
if self.steps.current == self.steps.last: if self.steps.current == self.steps.last:
@@ -311,10 +316,11 @@ class WizardView(TemplateView):
# get the form instance based on the data from the storage backend # get the form instance based on the data from the storage backend
# (if available). # (if available).
next_step = self.steps.next next_step = self.steps.next
new_form = self.get_form(next_step, new_form = self.get_form(
next_step,
data=self.storage.get_step_data(next_step), data=self.storage.get_step_data(next_step),
files=self.storage.get_step_files(next_step)) files=self.storage.get_step_files(next_step),
)
# change the stored current step # change the stored current step
self.storage.current_step = next_step self.storage.current_step = next_step
return self.render(new_form, **kwargs) return self.render(new_form, **kwargs)
@@ -340,21 +346,19 @@ class WizardView(TemplateView):
final_forms = OrderedDict() final_forms = OrderedDict()
# walk through the form list and try to validate the data again. # walk through the form list and try to validate the data again.
for form_key in self.get_form_list(): for form_key in self.get_form_list():
form_obj = self.get_form(step=form_key, form_obj = self.get_form(
step=form_key,
data=self.storage.get_step_data(form_key), data=self.storage.get_step_data(form_key),
files=self.storage.get_step_files(form_key)) files=self.storage.get_step_files(form_key)
)
if not form_obj.is_valid(): if not form_obj.is_valid():
return self.render_revalidation_failure(form_key, return self.render_revalidation_failure(form_key, form_obj, **kwargs)
form_obj,
**kwargs)
final_forms[form_key] = form_obj final_forms[form_key] = form_obj
# render the done view and reset the wizard before returning the # render the done view and reset the wizard before returning the
# response. This is needed to prevent from rendering done with the # response. This is needed to prevent from rendering done with the
# same data twice. # same data twice.
done_response = self.done(final_forms.values(), done_response = self.done(final_forms.values(), form_dict=final_forms, **kwargs)
form_dict=final_forms,
**kwargs)
self.storage.reset() self.storage.reset()
return done_response return done_response
@@ -414,8 +418,7 @@ class WizardView(TemplateView):
'prefix': self.get_form_prefix(step, form_class), 'prefix': self.get_form_prefix(step, form_class),
'initial': self.get_form_initial(step), 'initial': self.get_form_initial(step),
}) })
if issubclass(form_class, (forms.ModelForm, if issubclass(form_class, (forms.ModelForm, forms.models.BaseInlineFormSet)):
forms.models.BaseInlineFormSet)):
# If the form is based on ModelForm or InlineFormSet, # If the form is based on ModelForm or InlineFormSet,
# add instance if available and not previously set. # add instance if available and not previously set.
kwargs.setdefault('instance', self.get_form_instance(step)) kwargs.setdefault('instance', self.get_form_instance(step))
@@ -491,9 +494,11 @@ class WizardView(TemplateView):
If the data doesn't validate, None will be returned. If the data doesn't validate, None will be returned.
""" """
if step in self.form_list: if step in self.form_list:
form_obj = self.get_form(step=step, form_obj = self.get_form(
step=step,
data=self.storage.get_step_data(step), data=self.storage.get_step_data(step),
files=self.storage.get_step_files(step)) files=self.storage.get_step_files(step),
)
if form_obj.is_valid(): if form_obj.is_valid():
return form_obj.cleaned_data return form_obj.cleaned_data
return None return None
@@ -581,8 +586,10 @@ class WizardView(TemplateView):
This method must be overridden by a subclass to process to form data This method must be overridden by a subclass to process to form data
after processing all steps. after processing all steps.
""" """
raise NotImplementedError("Your %s class has not defined a done() " raise NotImplementedError(
"method, which is required." % self.__class__.__name__) "Your %s class has not defined a done() method, which is required."
% self.__class__.__name__
)
class SessionWizardView(WizardView): class SessionWizardView(WizardView):
@@ -612,19 +619,16 @@ class NamedUrlWizardView(WizardView):
We require a url_name to reverse URLs later. Additionally users can We require a url_name to reverse URLs later. Additionally users can
pass a done_step_name to change the URL name of the "done" view. pass a done_step_name to change the URL name of the "done" view.
""" """
assert 'url_name' in kwargs, \ assert 'url_name' in kwargs, 'URL name is needed to resolve correct wizard URLs'
'URL name is needed to resolve correct wizard URLs'
extra_kwargs = { extra_kwargs = {
'done_step_name': kwargs.pop('done_step_name', 'done'), 'done_step_name': kwargs.pop('done_step_name', 'done'),
'url_name': kwargs.pop('url_name'), 'url_name': kwargs.pop('url_name'),
} }
initkwargs = super(NamedUrlWizardView, cls).get_initkwargs(*args, initkwargs = super(NamedUrlWizardView, cls).get_initkwargs(*args, **kwargs)
**kwargs)
initkwargs.update(extra_kwargs) initkwargs.update(extra_kwargs)
assert initkwargs['done_step_name'] not in initkwargs['form_list'], \ assert initkwargs['done_step_name'] not in initkwargs['form_list'], \
'step name "%s" is reserved for "done" view' % \ 'step name "%s" is reserved for "done" view' % initkwargs['done_step_name']
initkwargs['done_step_name']
return initkwargs return initkwargs
def get_step_url(self, step): def get_step_url(self, step):
@@ -643,32 +647,37 @@ class NamedUrlWizardView(WizardView):
query_string = "?%s" % self.request.GET.urlencode() query_string = "?%s" % self.request.GET.urlencode()
else: else:
query_string = "" query_string = ""
return redirect(self.get_step_url(self.steps.current) + return redirect(self.get_step_url(self.steps.current) + query_string)
query_string)
# is the current step the "done" name/view? # is the current step the "done" name/view?
elif step_url == self.done_step_name: elif step_url == self.done_step_name:
last_step = self.steps.last last_step = self.steps.last
return self.render_done(self.get_form(step=last_step, form = self.get_form(
step=last_step,
data=self.storage.get_step_data(last_step), data=self.storage.get_step_data(last_step),
files=self.storage.get_step_files(last_step) files=self.storage.get_step_files(last_step),
), **kwargs) )
return self.render_done(form, **kwargs)
# is the url step name not equal to the step in the storage? # is the url step name not equal to the step in the storage?
# if yes, change the step in the storage (if name exists) # if yes, change the step in the storage (if name exists)
elif step_url == self.steps.current: elif step_url == self.steps.current:
# URL step name and storage step name are equal, render! # URL step name and storage step name are equal, render!
return self.render(self.get_form( form = self.get_form(
data=self.storage.current_step_data, data=self.storage.current_step_data,
files=self.storage.current_step_files, files=self.storage.current_step_files,
), **kwargs) )
return self.render(form, **kwargs)
elif step_url in self.get_form_list(): elif step_url in self.get_form_list():
self.storage.current_step = step_url self.storage.current_step = step_url
return self.render(self.get_form( return self.render(
self.get_form(
data=self.storage.current_step_data, data=self.storage.current_step_data,
files=self.storage.current_step_files, files=self.storage.current_step_files,
), **kwargs) ),
**kwargs
)
# invalid step name, reset to first and redirect. # invalid step name, reset to first and redirect.
else: else:
@@ -690,8 +699,7 @@ class NamedUrlWizardView(WizardView):
NamedUrlWizardView provides the url_name of this wizard in the context NamedUrlWizardView provides the url_name of this wizard in the context
dict `wizard`. dict `wizard`.
""" """
context = super(NamedUrlWizardView, self).get_context_data(form=form, context = super(NamedUrlWizardView, self).get_context_data(form=form, **kwargs)
**kwargs)
context['wizard']['url_name'] = self.url_name context['wizard']['url_name'] = self.url_name
return context return context

View File

@@ -1,3 +1,6 @@
[flake8]
max-line-length = 119
[metadata] [metadata]
license-file = LICENSE license-file = LICENSE

View File

@@ -54,11 +54,9 @@ class PreviewTests(TestCase):
""" """
FormPreview.parse_params takes a request object as the first argument. FormPreview.parse_params takes a request object as the first argument.
""" """
preview = TestFormPreview(TestForm)
response = self.client.get('/preview/') response = self.client.get('/preview/')
state = response.context['state'] state = response.context['state']
self.assertTrue(state.get('user') is not None, "Expected to find a " self.assertIsNotNone(state.get('user') is not None)
"user key in response.context['state']")
def test_unused_name(self): def test_unused_name(self):
""" """

View File

@@ -18,7 +18,8 @@ class TestCookieStorage(TestStorage, TestCase):
cookie_signer = signing.get_cookie_signer(storage.prefix) cookie_signer = signing.get_cookie_signer(storage.prefix)
storage.request.COOKIES[storage.prefix] = cookie_signer.sign( storage.request.COOKIES[storage.prefix] = cookie_signer.sign(
storage.encoder.encode({'key1': 'value1'})) storage.encoder.encode({'key1': 'value1'})
)
self.assertEqual(storage.load_data(), {'key1': 'value1'}) self.assertEqual(storage.load_data(), {'key1': 'value1'})
@@ -41,5 +42,7 @@ class TestCookieStorage(TestStorage, TestCase):
storage.init_data() storage.init_data()
storage.update_response(response) storage.update_response(response)
unsigned_cookie_data = cookie_signer.unsign(response.cookies[storage.prefix].value) unsigned_cookie_data = cookie_signer.unsign(response.cookies[storage.prefix].value)
self.assertJSONEqual(unsigned_cookie_data, self.assertJSONEqual(
{"step_files": {}, "step": None, "extra_data": {}, "step_data": {}}) unsigned_cookie_data,
{"step_files": {}, "step": None, "extra_data": {}, "step_data": {}}
)

View File

@@ -64,8 +64,7 @@ class TestModelForm(forms.ModelForm):
fields = '__all__' fields = '__all__'
TestModelFormSet = forms.models.modelformset_factory(TestModel, form=TestModelForm, extra=2, TestModelFormSet = forms.models.modelformset_factory(TestModel, form=TestModelForm, extra=2, fields='__all__')
fields='__all__')
class TestWizard(WizardView): class TestWizard(WizardView):
@@ -95,32 +94,27 @@ class FormTests(TestCase):
self.assertEqual(testform['form_list'], {'0': Step1, '1': Step2}) self.assertEqual(testform['form_list'], {'0': Step1, '1': Step2})
testform = TestWizard.get_initkwargs([('start', Step1), ('step2', Step2)]) testform = TestWizard.get_initkwargs([('start', Step1), ('step2', Step2)])
self.assertEqual( self.assertEqual(testform['form_list'], {'start': Step1, 'step2': Step2})
testform['form_list'], {'start': Step1, 'step2': Step2})
testform = TestWizard.get_initkwargs([Step1, Step2, ('finish', Step3)]) testform = TestWizard.get_initkwargs([Step1, Step2, ('finish', Step3)])
self.assertEqual( self.assertEqual(testform['form_list'], {'0': Step1, '1': Step2, 'finish': Step3})
testform['form_list'], {'0': Step1, '1': Step2, 'finish': Step3})
testform = TestWizardWithInitAttrs.get_initkwargs() testform = TestWizardWithInitAttrs.get_initkwargs()
self.assertEqual(testform['form_list'], {'0': Step1, '1': Step2}) self.assertEqual(testform['form_list'], {'0': Step1, '1': Step2})
def test_first_step(self): def test_first_step(self):
request = get_request() request = get_request()
testform = TestWizard.as_view([Step1, Step2]) testform = TestWizard.as_view([Step1, Step2])
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.steps.current, '0') self.assertEqual(instance.steps.current, '0')
testform = TestWizard.as_view([('start', Step1), ('step2', Step2)]) testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.steps.current, 'start') self.assertEqual(instance.steps.current, 'start')
def test_persistence(self): def test_persistence(self):
testform = TestWizard.as_view([('start', Step1), ('step2', Step2)]) testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
request = get_request({'test_wizard-current_step': 'start', request = get_request({'test_wizard-current_step': 'start', 'name': 'data1'})
'name': 'data1'})
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.steps.current, 'start') self.assertEqual(instance.steps.current, 'start')
@@ -133,56 +127,57 @@ class FormTests(TestCase):
def test_form_condition(self): def test_form_condition(self):
request = get_request() request = get_request()
testform = TestWizard.as_view( testform = TestWizard.as_view(
[('start', Step1), ('step2', Step2), ('step3', Step3)], [('start', Step1), ('step2', Step2), ('step3', Step3)],
condition_dict={'step2': True}) condition_dict={'step2': True}
)
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_next_step(), 'step2') self.assertEqual(instance.get_next_step(), 'step2')
testform = TestWizard.as_view( testform = TestWizard.as_view(
[('start', Step1), ('step2', Step2), ('step3', Step3)], [('start', Step1), ('step2', Step2), ('step3', Step3)],
condition_dict={'step2': False}) condition_dict={'step2': False}
)
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_next_step(), 'step3') self.assertEqual(instance.get_next_step(), 'step3')
testform = TestWizardWithInitAttrs.as_view( testform = TestWizardWithInitAttrs.as_view(
[('start', Step1), ('step2', Step2), ('step3', Step3)]) [('start', Step1), ('step2', Step2), ('step3', Step3)]
)
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_next_step(), 'step2') self.assertEqual(instance.get_next_step(), 'step2')
def test_form_kwargs(self): def test_form_kwargs(self):
request = get_request() request = get_request()
testform = TestWizard.as_view([
testform = TestWizard.as_view([('start', Step1), ('start', Step1),
('kwargs_test', CustomKwargsStep1)]) ('kwargs_test', CustomKwargsStep1),
])
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_form_kwargs('start'), {}) self.assertEqual(instance.get_form_kwargs('start'), {})
self.assertEqual(instance.get_form_kwargs('kwargs_test'), {'test': True}) self.assertEqual(instance.get_form_kwargs('kwargs_test'), {'test': True})
self.assertEqual(instance.get_form('kwargs_test').test, True) self.assertEqual(instance.get_form('kwargs_test').test, True)
def test_form_prefix(self): def test_form_prefix(self):
request = get_request() request = get_request()
testform = TestWizard.as_view([('start', Step1), ('step2', Step2)]) testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_form_prefix(), 'start') self.assertEqual(instance.get_form_prefix(), 'start')
self.assertEqual(instance.get_form_prefix('another'), 'another') self.assertEqual(instance.get_form_prefix('another'), 'another')
def test_form_initial(self): def test_form_initial(self):
request = get_request() request = get_request()
testform = TestWizard.as_view(
testform = TestWizard.as_view([('start', Step1), ('step2', Step2)], [('start', Step1), ('step2', Step2)],
initial_dict={'start': {'name': 'value1'}}) initial_dict={'start': {'name': 'value1'}}
)
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_form_initial('start'), {'name': 'value1'}) self.assertEqual(instance.get_form_initial('start'), {'name': 'value1'})
self.assertEqual(instance.get_form_initial('step2'), {}) self.assertEqual(instance.get_form_initial('step2'), {})
testform = TestWizardWithInitAttrs.as_view( testform = TestWizardWithInitAttrs.as_view(
[('start', Step1), ('step2', Step2)]) [('start', Step1), ('step2', Step2)]
)
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_form_initial('start'), {'name': 'value1'}) self.assertEqual(instance.get_form_initial('start'), {'name': 'value1'})
@@ -191,51 +186,42 @@ class FormTests(TestCase):
def test_form_instance(self): def test_form_instance(self):
request = get_request() request = get_request()
the_instance = TestModel() the_instance = TestModel()
testform = TestWizard.as_view([('start', TestModelForm), ('step2', Step2)], testform = TestWizard.as_view(
instance_dict={'start': the_instance}) [('start', TestModelForm), ('step2', Step2)],
instance_dict={'start': the_instance}
)
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(instance.get_form_instance('start'), the_instance)
self.assertIsNone(instance.get_form_instance('non_exist_instance'))
testform = TestWizardWithInitAttrs.as_view([('start', TestModelForm), ('step2', Step2)])
response, instance = testform(request)
self.assertEqual( self.assertEqual(
instance.get_form_instance('start'), instance.get_form_instance('start'),
the_instance) TestWizardWithInitAttrs.instance_dict['start']
self.assertEqual( )
instance.get_form_instance('non_exist_instance'),
None)
testform = TestWizardWithInitAttrs.as_view(
[('start', TestModelForm), ('step2', Step2)])
response, instance = testform(request)
self.assertEqual(
instance.get_form_instance('start'),
TestWizardWithInitAttrs.instance_dict['start'])
def test_formset_instance(self): def test_formset_instance(self):
request = get_request() request = get_request()
the_instance1, created = TestModel.objects.get_or_create( the_instance1, created = TestModel.objects.get_or_create(name='test object 1')
name='test object 1') the_instance2, created = TestModel.objects.get_or_create(name='test object 2')
the_instance2, created = TestModel.objects.get_or_create( testform = TestWizard.as_view(
name='test object 2') [('start', TestModelFormSet), ('step2', Step2)],
testform = TestWizard.as_view([('start', TestModelFormSet), ('step2', Step2)], instance_dict={'start': TestModel.objects.filter(name='test object 1')}
instance_dict={'start': TestModel.objects.filter(name='test object 1')}) )
response, instance = testform(request) response, instance = testform(request)
self.assertEqual(list(instance.get_form_instance('start')), [the_instance1]) self.assertEqual(list(instance.get_form_instance('start')), [the_instance1])
self.assertEqual(instance.get_form_instance('non_exist_instance'), None) self.assertEqual(instance.get_form_instance('non_exist_instance'), None)
self.assertEqual(instance.get_form().initial_form_count(), 1) self.assertEqual(instance.get_form().initial_form_count(), 1)
def test_done(self): def test_done(self):
request = get_request() request = get_request()
testform = TestWizard.as_view([('start', Step1), ('step2', Step2)]) testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
response, instance = testform(request) response, instance = testform(request)
self.assertRaises(NotImplementedError, instance.done, None) self.assertRaises(NotImplementedError, instance.done, None)
def test_revalidation(self): def test_revalidation(self):
request = get_request() request = get_request()
testform = TestWizard.as_view([('start', Step1), ('step2', Step2)]) testform = TestWizard.as_view([('start', Step1), ('step2', Step2)])
response, instance = testform(request) response, instance = testform(request)
instance.render_done(None) instance.render_done(None)

View File

@@ -6,12 +6,13 @@ from formtools.wizard.storage.base import BaseStorage
class TestLoadStorage(TestCase): class TestLoadStorage(TestCase):
def test_load_storage(self): def test_load_storage(self):
self.assertEqual( self.assertIsInstance(
type(get_storage('formtools.wizard.storage.base.BaseStorage', 'wizard1')), get_storage('formtools.wizard.storage.base.BaseStorage', 'wizard1'),
BaseStorage) BaseStorage
)
def test_missing_storage(self): def test_missing_storage(self):
self.assertRaises(MissingStorage, get_storage, with self.assertRaises(MissingStorage):
'formtools.wizard.storage.idontexist.IDontExistStorage', 'wizard1') get_storage('formtools.wizard.storage.idontexist.IDontExistStorage', 'wizard1')
self.assertRaises(MissingStorage, get_storage, with self.assertRaises(MissingStorage):
'formtools.wizard.storage.base.IDontExistStorage', 'wizard1') get_storage('formtools.wizard.storage.base.IDontExistStorage', 'wizard1')

View File

@@ -457,8 +457,7 @@ class WizardFormKwargsOverrideTests(TestCase):
self.assertNotEqual(formset.queryset, None) self.assertNotEqual(formset.queryset, None)
self.assertEqual(formset.initial_form_count(), 1) self.assertEqual(formset.initial_form_count(), 1)
self.assertEqual(['staff@example.com'], self.assertEqual(['staff@example.com'], list(formset.queryset.values_list('email', flat=True)))
list(formset.queryset.values_list('email', flat=True)))
class WizardInlineFormSetTests(TestCase): class WizardInlineFormSetTests(TestCase):