gpt4 book ai didi

python - django、uni_form 和 python 的 __init__() 函数——如何将参数传递给表单?

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:29 24 4
gpt4 key购买 nike

我有点难以理解 python __init__( ) 函数的工作原理。我想做的是在 django 中创建一个新表单,并使用 uni_form 帮助器以自定义方式使用字段集显示表单,但是我将一个参数传递给表单,该表单应该稍微改变表单的布局而且我不知道如何进行这项工作。这是我的代码:

class MyForm(forms.Form):
name = forms.CharField(label=_("Your name"), max_length=100, widget=forms.TextInput())
city = forms.CharField(label=_("Your city"), max_length=100, widget=forms.TextInput())
postal_code = forms.CharField(label=_("Postal code"), max_length=7, widget=forms.TextInput(), required=False)

def __init__(self, city, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
if city == "Vancouver":
self.canada = True

if self.canada:
# create an extra uni_form fieldset that shows the postal code field
else:
# create the form without the postal code field

但是,这对我不起作用的原因。 self.canada 在 __init__ 之外似乎从来没有任何值,因此即使我将该参数传递给函数,我也无法在我的类中使用该值。我找到了一个解决方法,即使用 self.fields 在 __init__ 中完全创建表单,但这很难看。我如何在 __init__ 之外使用 self.canada?

最佳答案

您误解了类在 Python 中的工作方式。您试图在类内部但在任何函数之外运行代码,这不太可能起作用,尤其是当它依赖于 __init__ 内部发生的事情时。该代码将在首次导入类时进行评估,而 __init__ 在每个表单被实例化时发生。

最好的方法肯定是在表单中包含字段集,但当 canada 为 True 时,不要显示它们。您的 __init__ 代码可以根据该值将这些字段设置为 required=False,因此您不会收到验证错误。

关于python - django、uni_form 和 python 的 __init__() 函数——如何将参数传递给表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1700043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com