0
我有一個Django可插入應用程序,它提供了幾種形式。這些表單有幾個與它們相關的設置來控制一些表單的行爲(例如,標籤,初始值等)。Django測試可插入的應用程序和自定義設置
我按照blog post設置了可插拔應用程序的默認設置,這在正常情況下效果很好。但是,在我提供覆蓋的測試中,覆蓋不會得到應用。
下面是形式之一代碼:
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)
顯然,當下類的定義,如標籤和inital值設置立即生效,因此覆蓋對他們沒有影響。
我結束了在形式上的__init__
方法評估所有設置的相當hackish的solugion:
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=())
顯然,大量的運動部件。我對這段代碼並不滿意。如何正確測試設置對錶單的影響而不訴諸這些黑客行爲?
我測試配置本身,因爲這是一個可插拔的應用程序。我想確保配置具有預期效果。 – hayavuk