【发布时间】:2015-07-31 20:34:42
【问题描述】:
我有一个扩展 django 中的用户模型的模型,该模型是一个用户配置文件,我将使用它来将附加信息与用户模型相关联。我有模型、表单、视图、url 和 html,但是 html 没有显示字段,只显示提交按钮。
代码如下:
models.py
class userProfile(models.Model):
def url(self, filename):
ruta = "MultimediaData/Users/%s/%s"%(self.user.username, filename)
return ruta
user = models.ForeignKey(User, unique=True)
photo = models.ImageField(upload_to= url)
telefono= models.CharField(max_length=30)
def __srt__(self):
return self.user.username
forms.py
class userProfileForm(forms.Form):
class Meta:
model = userProfile
views.py
def perfil_view(request):
if request.method == 'POST':
form = userProfileForm(request.POST)
if form.is_valid():
user = request
perfil = userProfileForm(user = form.cleaned_data.get('user'),
photo = form.cleaned_data['photo'],
telefono = form.cleaned_data['telefono'],
)
perfil.save()
ctx ={'form':form}
return render_to_response('prueba.html',ctx,context_instance=RequestContext(request))
else:
ctx ={'form':form}
return render_to_response('perfil.html',ctx,context_instance=RequestContext(request))
else:
form = userProfileForm()
ctx ={'form':form}
return render_to_response('prueba.html',ctx,context_instance=RequestContext(request))
prueba.html
{% extends "base2.html" %}
{% block title %}Prueba{% endblock %}
{% block content %}
<form action="." method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
{% endblock %}
settings.py
AUTH_PROFILE_MODULE = 'melomanos.userProfile'
【问题讨论】:
-
您的表单需要继承自
forms.ModelForm。您在模型__srt__()而不是__str()__中有错字(您使用的是 Python 3 吗?否则您应该使用__unicode__(),我相信) -
在你看来,
user = request有什么用? -
此外:您的 ModelForm 应该明确列出字段。阅读docs.djangoproject.com/en/1.8/topics/forms/modelforms/…
-
另外:如果您只想添加/丰富用户的属性并且每个用户只有 一个 个人资料,那么您应该建立一对一的关系:docs.djangoproject.com/en/1.8/topics/auth/customizing/…
-
您是否拥有所有必要的上下文处理器? docs.djangoproject.com/en/1.8/ref/templates/api/…
标签: python django django-models django-forms modelform