請問您可以用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