Vì bạn chưa có câu trả lời, tôi đang cung cấp câu trả lời này, mặc dù nó không chính xác những gì bạn đang yêu cầu. Tôi nghĩ rằng nó có thể giúp bạn anyway, mặc dù ...
Đây là cách tôi đã thực hiện nó trong một vài dự án sử dụng django-đăng ký 1.0, Python 2.7 và Django 1.6. Trong trường hợp này, tôi chỉ sử dụng username
, email
và password
để đăng ký và sau đó người dùng có thể thêm các trường hồ sơ sau khi họ đã đăng ký. Nó không phải là quá khó khăn để sửa đổi điều này để chấp nhận các lĩnh vực sau khi đăng ký.
Tôi sử dụng Twitter Bootstrap để tạo kiểu, vì vậy các mẫu của tôi có thể hoặc không thể giúp bạn. Tôi bỏ chúng ra trong trường hợp này.
Tôi tạo ra một vài ứng dụng được gọi là accounts
và authentication
giữ mô hình của tôi, hình thức và quan điểm:
accounts.models.UserProfile
from django.db import models
class UserProfile(models.Model):
user = models.OneToOneField(User)
title = models.CharField(max_length=100)
company = models.CharField(max_length=250)
authentiction.forms.EditUserProfileForm
from django.forms import ModelForm
class EditUserProfileForm(ModelForm):**
. . .
title = forms.CharField(widget=forms.TextInput())
company = forms.CharField(widget=forms.TextInput())
. . .
accounts.views.EditUserProfileView
from django.views.generic.base import View
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from .models import UserProfile
from .forms import EditUserProfileForm
class EditUserProfileView(View):
form_class = EditUserProfileForm
template_name = 'accounts/profile_edit.html'
@method_decorator(login_required)
def get(self, request, *args, **kwargs):
profile = get_object_or_404(UserProfile, user=request.user)
form_dict = {
'title': profile.title,
'company': profile.company,
}
form = self.form_class(form_dict)
return render(request, self.template_name, {
'form': form,
'profile': profile,
})
@method_decorator(login_required)
def post(self, request, *args, **kwargs):
profile = get_object_or_404(UserProfile, user=request.user)
form = self.form_class(request.POST, instance=profile)
if form.is_valid():
company = form.cleaned_data['company']
title = form.cleaned_data['title']
title.company = title
profile.company = company
# you might need to save user too, depending on what fields
request.user.save()
profile.save()
return HttpResponseRedirect('/dashboard/')
return render(request, self.template_name, {'form': form})
project.urls
url(r'^accounts/profile/edit/', EditUserProfileView.as_view(), name='edit_user_profile_view'),
tại sao bạn nói câu trả lời không áp dụng cho django đăng ký 1.0? –
@ChrisHawkes Tôi nhận được lỗi "không thể nhập tên đăng ký". Tôi nghĩ rằng đăng ký bị tước trong đăng ký django 1.0. Và tôi đã thử sử dụng "url (r '^ register/$', RegistrationView.as_view (form_class = UserRegForm))". Nhưng vẫn không có may mắn – Iqbal
theo một trong những câu trả lời được cung cấp để sửa lỗi đó với phiên bản mới của đăng ký django bạn phải thêm này, từ django.conf.urls mẫu nhập, bao gồm, url từ registration.backends .default.views nhập khẩu RegistrationView từ abby.apps.accounts.forms nhập UserRegForm urlpatterns = mẫu ('', url (r '^ đăng ký/$', RegistrationView.as_view (form_class = UserRegForm)), ) http://stackoverflow.com/questions/14726725/python-django-django-registration-add-an-extra-field/16366997#16366997 –