请问您可以用Django和自定义用户模型来帮助我吗?我是一个Django世界的新手,所以我开始从最新的1.7版本中学习。在我的项目中,我使用的是django-allauth软件包,我想创建来自contrib.auth的标准用户类和我的自定义模型“用户”之间的OneToOne关系。Django 1.7旧式自定义用户模型
#models.py
import datetime
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user=models.OneToOneField(User)
f_name=models.CharField(null=True, blank=True, max_length='30')
l_name=models.CharField(null=True, blank=True, max_length='30')
birth_date=models.DateField(null=True, blank=True)
company=models.CharField(null=True, blank=True, max_length='30')
rate=models.FloatField(null=True, blank=True, default=0.0)
skills=models.CharField(null=True, blank=True, max_length='255')
bill_rate=models.CharField(null=True, blank=True, max_length='255')
contacts=models.CharField(null=True, blank=True, max_length='255')
portfolio=models.CharField(null=True, blank=True, max_length='127')
avatar = models.ImageField(upload_to='/static/img/%Y/%m/%d', blank=True, null=True)
def __unicode__(self):
return self.user.username
这是forms.py
#forms.py
from django.forms import ModelForm
from users.models import Profile
class ProfileForm(ModelForm):
class Meta:
model = Profile
fields = ('f_name', 'l_name', 'company',)
这是一个模板:
{% extends "base_.html" %}
{% block main_content%}
<div>
{% if user.is_authenticated %}
<p>Welcome, {{ request.user.id }}!</p>
<form id="profile_form" method="POST" action="/accounts/profile" enctype="multipart/form-data">
{% csrf_token %}
{{ profile_form.as_p }}
<input type="submit" name="submit" value="Save" />
</form>
{% endif %}
</div>
{% endblock%}
而且views.py:
from django.http import HttpResponse
from django.template import RequestContext
from django.conf import settings
from django.shortcuts import render, render_to_response
from models import Profile
from forms import ProfileForm
def edit(request):
profile_form = ProfileForm()
user = request.user
if request.method == 'POST':
profile_form = ProfileForm(data=request.POST, instance=user)
if profile_form.is_valid():
profile = profile_form.save(commit=False)
profile.user = user
profile.save()
return render_to_response("profile.html", RequestContext(request))
return render_to_response('profile_edit.html', RequestContext(request, {'profile_form' : profile_form}))
我建这一切的文件,根据通过本教程: http://www.tangowithdjango.com/book/chapters/login.html
最后,所有这些工作正常,但是当我按下保存按钮时,POST表单不起作用。我看不到数据库中的任何更改。重定向工作良好,实际上似乎一切正常,但我没有任何数据(我使用的是postgres)。
我花了很多钱找到答案,并尝试几乎所有的互联网,但我仍然有这个问题。也许我不明白它是如何从django文档工作的,但我尝试了相同的方法,仍然有问题。
预先感谢您!
UPDATE: 我的urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
url(r'^$', 'laniakea.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^accounts/', include('allauth.urls')),
url('accounts/profile', 'laniakea.views.prof', name='prof'),
url(r'^edit', 'users.views.edit', name='edit'),
)
你可以显示urls.py吗? – 2014-10-16 12:27:13
您的表单不会张贴到您展示的视图,而是发布到“laniakea.views.prof”上完全不同视图提供的“accounts/profile”中。那是什么意思? – 2014-10-16 13:04:01
Prof只是一个带有“欢迎,%username%”和“编辑”按钮的模板。而'users.views.edit'是ProfileForm的一个页面。 – NONAMA 2014-10-16 13:09:47