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

标签 python django django-templates django-forms django-views

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

我想添加简介(在 textarea 中)、兴趣(textarea)和个人资料照片(图片上传)。此页面看起来像这样:http://pootle.locamotion.org/accounts/personal/edit/ (您可能需要登录才能看到此页面)

我编辑了 local_apps/pootle_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})}  

并在“”templates/profiles/edit_personal.html””

<form method="post" action="/accounts/{{user.username}}/">                    
    <p> 
        <label for="id_first_name">{% trans 'First Name' %}</label>           
        {{ form.first_name }}                                                 
        {{ form.first_name.errors }}
    </p>
    <p> 
        <label for="id_last_name">{% trans 'Last Name' %}</label>             
        {{ form.last_name }}
        {{ form.last_name.errors }}
    </p>
    <p>
        <label for="id_email">{% trans 'Email address' %}</label>
        {{ form.email }}
        {{ form.email.errors }}
    </p>
    <p>
        <label for="id_bio">{% trans 'Bio' %}</label>
        {{ form.bio }}                                                        
        {{ form.bio.errors }}
    </p>                                                                      
    <p class="common-buttons-block">
        <input type="submit" class="save" value="{% trans 'Save' %}" />       
    </p>                                                                      
</form>

但它不会在个人资料页面上显示最后一个 bio textarea 字段。 不加载 form.bio。这是 html 源代码:

<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>

我在 auth_user 中添加了一个 bio 列:

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)

有人能看出缺少了什么吗? 非常感谢任何建议!!

问候

最佳答案

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

其次,要向模型表单添加额外的字段,您需要在表单级别明确定义它们:

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')                  

最后,您需要在 View 中手动执行一些操作以保存这个额外的字段,因为用户模型不知道它。

关于python - 如何使用 django.forms Textarea 添加额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190386/

相关文章:

django - 错误 : Command "python setup.py egg_info" failed with error code 1 in/tmp/pip-install-YYFUnW/psycopg2/

python - Django 测试。状态 200 和 302

python - Django - 多个数据库 - 如何定义路由器?

Django,全局模板变量

django - 在 Django 中上传和读取 xlsx 文件

python - 我如何使用Python查找目录中是否有任何txt文件

Python 从子脚本输出到子进程中的控制台

python - NoReverseMatch 错误,尝试在 Django 中设置详细页面 View

python - 在同一台计算机上运行的 Python 软件之间进行通信的最佳方式是什么?

python - 从 Web 服务器产生类似文件的响应是如何工作的?