1
我需要將ChoiceField添加到許多不同的表單中,並且選項來自每個表單上的類屬性。每種形式都有自己的一套其他領域。如何使用裝飾器將字段添加到Django表單
我不能把字段放在基類中,因爲那個類沒有選擇屬性,所以我想我可以使用裝飾器將字段添加到每個子類中。
但是,即使裝飾器將該字段添加到窗體類中,當窗體在模板中呈現時,它也不會被包含。有一些元類黑魔法我錯過了。
裝飾者如何將一個字段添加到表單中?
我需要將ChoiceField添加到許多不同的表單中,並且選項來自每個表單上的類屬性。每種形式都有自己的一套其他領域。如何使用裝飾器將字段添加到Django表單
我不能把字段放在基類中,因爲那個類沒有選擇屬性,所以我想我可以使用裝飾器將字段添加到每個子類中。
但是,即使裝飾器將該字段添加到窗體類中,當窗體在模板中呈現時,它也不會被包含。有一些元類黑魔法我錯過了。
裝飾者如何將一個字段添加到表單中?
您必須更換形式的構造函數的裝飾,像這樣:
def form_with_captcha(orig_form, theme=None):
if hasattr(orig_form, "captcha"):
raise ValueError("form already has a field captcha!")
orig_form.__orig__init__ = orig_form.__init__
def new_init(self, *args, **kwargs):
self.__orig__init__(*args, **kwargs)
self.fields["captcha"] = self.captcha
orig_form.__init__ = new_init
orig_form.captcha = ReCaptchaField(attrs={"theme": theme or "white"})
return orig_form
使用形式工廠和動態使用'類型生成表單類()'。 –