Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单:设置字符域的初始值_Python_Django_Forms - Fatal编程技术网

Python Django表单:设置字符域的初始值

Python Django表单:设置字符域的初始值,python,django,forms,Python,Django,Forms,我正在写一个网页,作为一个更大的django项目的一部分,该项目允许现有用户更改其个人信息。问题是表单需要访问用户的现有信息。我想设置它,以便在页面加载时,现有信息显示在每个字符字段中,用户可以进行适当的更改并接受。页面将加载,但字符域根本不会出现。这就是我到目前为止所做的: 类EditPersonForm(forms.Form): 对于\uuuu init\uuu方法中的每个字段,您需要执行以下操作: class EditPersonForm(forms.Form): def __i

我正在写一个网页,作为一个更大的django项目的一部分,该项目允许现有用户更改其个人信息。问题是表单需要访问用户的现有信息。我想设置它,以便在页面加载时,现有信息显示在每个字符字段中,用户可以进行适当的更改并接受。页面将加载,但字符域根本不会出现。这就是我到目前为止所做的:

类EditPersonForm(forms.Form):


对于
\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)

您是否考虑过使用django
UpdateView
一篇关于django动态表单字段的古老但非常好的文章:我做了您建议的更改,现在出现了一些charfield,但只是从street_address向下显示。初始值没有出现,这使我相信初始值可能不是实现这一点的正确论据。我是否应该放弃当前的解决方案,转而尝试使用UpdateView?显示的字段是我自己定义的字段。(用户名、密码、名字、姓氏不出现)请用新代码更新您的问题“UpdateView”旨在用于此类场景。。不管你用不用。。这取决于你。
form = EditPersonForm(initial=profile_default)