Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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.forms Textarea添加额外字段_Python_Django_Django Templates_Django Forms_Django Views - Fatal编程技术网

Python 如何使用django.forms Textarea添加额外字段

Python 如何使用django.forms Textarea添加额外字段,python,django,django-templates,django-forms,django-views,Python,Django,Django Templates,Django Forms,Django Views,我是django的新手,正在做一个pootle项目 我想添加个人简历(在textarea)、兴趣(textarea)和个人资料图片(图片上传)。此页面如下所示:(您可能需要登录才能查看此页面) 我编辑了本地应用程序/pootle\u profile/views.py,如下所示: from django.forms import ModelForm, Textarea class UserForm(ModelForm):

我是django的新手,正在做一个pootle项目

我想添加个人简历(在textarea)、兴趣(textarea)和个人资料图片(图片上传)。此页面如下所示:(您可能需要登录才能查看此页面)

我编辑了本地应用程序/pootle\u profile/views.py,如下所示:

from django.forms import ModelForm, Textarea 

class UserForm(ModelForm):                                                    
    class Meta:                                                               
        model = User                                                          
        fields = ('first_name', 'last_name', 'email', 'bio')                  
        widgets = {'bio': Textarea(attrs={'cols': 80, 'rows': 20})}  
在“模板/配置文件/编辑_personal.html”中

有人能看看少了什么吗? 非常感谢您的任何建议


关于

不建议像auth_user那样直接更改django表,尽管要使上述操作生效,您必须更改django.contrib.auth.models中的auth模型以添加bio字段


推荐的操作方法是通过UserProfile,它与用户表具有OneToOne关系

首先,正如Digitalpbk所说,不要手动将列添加到Django的表中。相反,在你自己的应用程序中创建一个UserProfile模型,并将OneToOneField设置为
auth.User

其次,要向modelform添加额外字段,需要在表单级别显式定义它们:

class UserForm(ModelForm):                                                    
    bio = forms.CharField(widget=forms.Textarea(attrs={'cols': 80, 'rows': 20}))
    class Meta:                                                               
        model = User                                                          
        fields = ('first_name', 'last_name', 'email', 'bio')                  

最后,您需要在视图中手动执行一些操作来保存此额外字段,因为用户模型不知道它。

您是如何将bio附加到
用户
模型的?它可能没有在python中定义,这就是为什么您没有看到预期的行为。最佳实践是使用
UserProfile
范式来处理这类事情。看,嗨,丹尼尔,它现在显示在文本区!!但还有一个问题。它不会将其保存到数据库。。将额外字段保存到数据库时,我缺少了什么?非常感谢你的建议!
<p>
    <label for="id_email">Email address</label>
    <input id="id_email" type="text" name="email" value="sample@email.com" maxlength="75" />
</p>
<p>
    <label for="id_bio">Bio</label>
</p>
MariaDB [pootle]> describe auth_user;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| username     | varchar(30)  | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(30)  | NO   |     | NULL    |                |
| email        | varchar(75)  | NO   |     | NULL    |                |
| password     | varchar(128) | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| last_login   | datetime     | NO   |     | NULL    |                |
| date_joined  | datetime     | NO   |     | NULL    |                |
| bio          | text         | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)
class UserForm(ModelForm):                                                    
    bio = forms.CharField(widget=forms.Textarea(attrs={'cols': 80, 'rows': 20}))
    class Meta:                                                               
        model = User                                                          
        fields = ('first_name', 'last_name', 'email', 'bio')