Nao*_*ino 2 python django django-templates django-forms django-views
我是django的新手,正在开展一个项目.
我想添加bio(textarea),兴趣(textarea)和profile pics(图片上传).此页面如下所示: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})}
Run Code Online (Sandbox Code Playgroud)
并在""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>
Run Code Online (Sandbox Code Playgroud)
但它没有显示个人资料页面上的最后一个生物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>
Run Code Online (Sandbox Code Playgroud)
我在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)
Run Code Online (Sandbox Code Playgroud)
有人可以看到缺少的东西吗?任何建议都非常感谢!!
问候
Dan*_*man 12
首先,正如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')
Run Code Online (Sandbox Code Playgroud)
最后,您需要手动在视图中执行某些操作以保存此额外字段,因为User模型不知道它.
| 归档时间: |
|
| 查看次数: |
6725 次 |
| 最近记录: |