Python Django表单:设置字符域的初始值
我正在写一个网页,作为一个更大的django项目的一部分,该项目允许现有用户更改其个人信息。问题是表单需要访问用户的现有信息。我想设置它,以便在页面加载时,现有信息显示在每个字符字段中,用户可以进行适当的更改并接受。页面将加载,但字符域根本不会出现。这就是我到目前为止所做的: 类EditPersonForm(forms.Form):Python Django表单:设置字符域的初始值,python,django,forms,Python,Django,Forms,我正在写一个网页,作为一个更大的django项目的一部分,该项目允许现有用户更改其个人信息。问题是表单需要访问用户的现有信息。我想设置它,以便在页面加载时,现有信息显示在每个字符字段中,用户可以进行适当的更改并接受。页面将加载,但字符域根本不会出现。这就是我到目前为止所做的: 类EditPersonForm(forms.Form): 对于\uuuu init\uuu方法中的每个字段,您需要执行以下操作: class EditPersonForm(forms.Form): def __i
对于
\uuuu init\uuu
方法中的每个字段,您需要执行以下操作:
class EditPersonForm(forms.Form):
def __init__(self, person, *args, **kwargs):
super(EditPersonForm, self).__init__(*args, **kwargs)
profile = person
[...] #ommited code for simplification
self.fields['username']= forms.CharField(
label =('User Name'), max_length = constants.MAX_LEN_NAME,
initial = profile_default.username)
[...] # do the same for rest of the fields
另外,既然您在类元中定义了模型
,那么您是否应该使用模型形式
class EditPersonForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EditPersonForm, self).__init__(*args, **kwargs)
[...]
class Meta:
model = Person
exclude = ('user',)
希望这有帮助:-)这样做没有意义。字段应该在类级别定义,而不是在\uuuu init\uuuu
方法中定义:这样做的唯一原因是当您希望以编程方式重写某些字段的某些方面时。将所有这些定义移到方法之外,并删除它们的initial
属性
相反,在视图中实例化表单时,将initial
dict作为关键字参数传递:
form = EditPersonForm(initial=profile_default)
您是否考虑过使用djangoUpdateView
一篇关于django动态表单字段的古老但非常好的文章:我做了您建议的更改,现在出现了一些charfield,但只是从street_address向下显示。初始值没有出现,这使我相信初始值可能不是实现这一点的正确论据。我是否应该放弃当前的解决方案,转而尝试使用UpdateView?显示的字段是我自己定义的字段。(用户名、密码、名字、姓氏不出现)请用新代码更新您的问题“UpdateView”旨在用于此类场景。。不管你用不用。。这取决于你。
form = EditPersonForm(initial=profile_default)