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