Python Django表单:同一模型中HTML表单字段和forms.py字段的组合
我的应用程序有一个表单,它要求我在成功登录后使用从用户Twitter帐户提取的信息预先填写表单字段中的某些值。以下是用户从其Twitter帐户成功登录后我的表单的外观(“名称”字段预先填充了与用户Twitter帐户关联的全名): models.pyPython Django表单:同一模型中HTML表单字段和forms.py字段的组合,python,html,django,forms,python-2.7,Python,Html,Django,Forms,Python 2.7,我的应用程序有一个表单,它要求我在成功登录后使用从用户Twitter帐户提取的信息预先填写表单字段中的某些值。以下是用户从其Twitter帐户成功登录后我的表单的外观(“名称”字段预先填充了与用户Twitter帐户关联的全名): models.py from django.db import models from django.core.validators import RegexValidator from django.contrib.auth.models import User
from django.db import models
from django.core.validators import RegexValidator
from django.contrib.auth.models import User
class Evangelized(models.Model):
full_name = models.CharField(max_length=128)
email = models.EmailField()
mobile_no = models.CharField(unique=True, max_length = 10, validators=[RegexValidator(regex='^\w{10}$', message='Mobile number should be strictly of 10 digits.')])
twitter_url = models.CharField(unique=True, max_length=128)
GENDER_CHOICES = (('M', 'Male'), ('F', 'Female'), ('U', 'Unisex/Parody'))
gender = models.CharField(choices=GENDER_CHOICES, max_length = 128)
HTML
请注意,我已将全名
属性包含在我的models.py
中,但已将其从forms.py
中排除。我在HTMl页面中包含了名称
字段,如下所示:
NAME: <input type = "text" name = "name" value = "{{user.get_full_name}}"><br>
现在,我希望Name
字段值与所有其他表单字段值一样存储在数据库中。但是,除了全名
属性外,所有其他表单属性都会在提交表单时存储在数据库中
我想我没有在视图中正确地捕获HTML页面中的名称表单字段值。有什么解决办法吗
编辑1:
根据一位评论员的建议,我在views.py
中做了以下更改:
def fillform(request):
if request.method == 'POST':
form = EvangelizedForm(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
else:
form.errors
else:
#form = EvangelizedForm()
form = EvangelizedForm(initial={'full_name': request.user.get_full_name()})
context = RequestContext(request,
{'request': request,
'user': request.user, 'form':form})
#return render(request, 'rango/fillform.html', {'form': form, 'context_instance':context})
return render_to_response('rango/fillform.html',
context_instance=context)
但是,我现在遇到以下错误:
'WSGIRequest' object has no attribute 'get_full_name'
这里似乎出了什么问题?我真的不明白你为什么不在表单上像所有其他字段一样设置全名
字段,并将名称值作为初始数据传递。如何将Twitter登录后从用户对象获得的名称值作为默认值传递到forms.py中的“full_name”属性中?这似乎与Twitter无关。您将从request.user
获取全名,并将其传递到模板中;您可以用完全相同的方式将其传递到else块中的初始数据:form=EvangelizedForm(initial={'full\u name':request.user.get\u full\u name()})
@DanielRoseman我尝试在else块中添加它,但遇到错误。我已经编辑了我的原始帖子以包含错误。一定要看一看。我真的不明白你为什么不像其他人一样在表单上设置full\u name
字段,并将名称值作为初始数据传递。如何将Twitter登录后从用户对象获得的名称值作为默认值传递到forms.py中的“full_name”属性中?这似乎与Twitter无关。您将从request.user
获取全名,并将其传递到模板中;您可以用完全相同的方式将其传递到else块中的初始数据:form=EvangelizedForm(initial={'full\u name':request.user.get\u full\u name()})
@DanielRoseman我尝试在else块中添加它,但遇到错误。我已经编辑了我的原始帖子以包含错误。一定要看一看。
def fillform(request):
if request.method == 'POST':
form = EvangelizedForm(request.POST)
if form.is_valid():
form.full_name = request.POST['name']
form.save(commit=True)
return index(request)
else:
form.errors
else:
form = EvangelizedForm()
context = RequestContext(request,
{'request': request,
'user': request.user, 'form':form})
#return render(request, 'rango/fillform.html', {'form': form, 'context_instance':context})
return render_to_response('rango/fillform.html',
context_instance=context)
def fillform(request):
if request.method == 'POST':
form = EvangelizedForm(request.POST)
if form.is_valid():
form.save(commit=True)
return index(request)
else:
form.errors
else:
#form = EvangelizedForm()
form = EvangelizedForm(initial={'full_name': request.user.get_full_name()})
context = RequestContext(request,
{'request': request,
'user': request.user, 'form':form})
#return render(request, 'rango/fillform.html', {'form': form, 'context_instance':context})
return render_to_response('rango/fillform.html',
context_instance=context)
'WSGIRequest' object has no attribute 'get_full_name'