我有一个可插入的 Django 应用程序,它提供了一些表单。表单有一些与它们相关联的设置,用于控制某些表单的行为(例如,标签、初始值等)。
我按照博客文章为可插入应用程序设置了默认设置,并且在正常情况下运行良好。但是,在我提供覆盖的测试中,根本不会应用覆盖。
这是其中一种形式的代码:
if settings.CURRENCY_FORM_INCLUDE_EMPTY:
currencies.insert(0, (settings.CURRENCY_FORM_EMPTY_VALUE,
settings.CURRENCY_FORM_EMPTY_LABEL))
class CurrencyForm(forms.Form):
currency = forms.ChoiceField(
required=False,
choices=currencies,
label=settings.CURRENCY_FORM_LABEL,
initial=settings.CURRENCY_FORM_INITIAL_VALUE)
显然,在定义时刻类时,会立即应用标签和初始值等设置,因此覆盖对它们没有影响。
我最终得到了一个相当老套的方法来评估表单__init__
方法中的所有设置:
class CurrencyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(CurrencyForm, self).__init__(*args, **kwargs)
choices = list(currencies)
if settings.CURRENCY_FORM_INCLUDE_EMPTY:
choices.insert(0, (settings.CURRENCY_FORM_EMPTY_VALUE,
settings.CURRENCY_FORM_EMPTY_LABEL))
self.fields['currency'].label = settings.CURRENCY_FORM_LABEL
self.fields['currency'].choices = choices
self.fields['currency'].initial = kwargs.get(
'initial', {}
).get('currency', settings.CURRENCY_FORM_INITIAL_VALUE)
currency = forms.ChoiceField(required=False,
choices=())
显然,有很多活动部件。我对这段代码不太满意。如何在不诉诸这些技巧的情况下正确测试设置对表单的影响?