注册表格与个人资料的字段

xRo*_*bot 3 django registration django-forms

我有一个简单的问题.这是我的个人资料:

class Profile(models.Model):

    user = models.ForeignKey(User, unique=True)
    born = models.DateTimeField('born to')    
    photo = models.ImageField(upload_to='profile_photo')
Run Code Online (Sandbox Code Playgroud)

我想创建一个包含这些字段的注册表单(来自UserProfile模型):

  • 用户名
  • 名字
  • 天生
  • 照片

这些字段是必需的.

我怎么做?

如何get_profile()在模板中处理此问题?

谢谢 :)

Mic*_*ene 9

建立

您使用的是django-profilesdjango-registration项目吗?如果没有,你应该 - 已经为你编写了大部分代码.

轮廓

您的用户个人资料代码是:

class Profile(models.Model):
    user = models.ForeignKey(User, unique=True)
    born = models.DateTimeField('born to')    
    photo = models.ImageField(upload_to='profile_photo')
Run Code Online (Sandbox Code Playgroud)

您是否在Django设置中正确设置了此配置文件?你应该添加它,如果没有,替换yourapp你的应用程序的名称:

AUTH_PROFILE_MODULE = "yourapp.Profile"
Run Code Online (Sandbox Code Playgroud)

报名表格

django-registration附带一些默认注册表单,但您指定要创建自己的注册表单.每个Django表单字段默认为必需,因此您不需要更改它.重要的是确保处理现有的注册表单字段并添加配置文件创建.这样的事情应该有效:

from django import forms
from registration.forms import RegistrationForm
from yourapp.models import Profile
from registration.models import RegistrationProfile

class YourRegistrationForm(RegistrationForm):
    born = forms.DateTimeField()
    photo = forms.ImageField()

    def save(self, profile_callback=None):
        new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
        password=self.cleaned_data['password1'],
        email = self.cleaned_data['email'])
        new_profile = Profile(user=new_user, born=self.cleaned_data['born'], photo=self.cleaned_data['photo'])
        new_profile.save()
        return new_user
Run Code Online (Sandbox Code Playgroud)

把它带到一起

您可以使用默认django-registration模板和视图,但希望将表单传递给它们urls.py:

from registration.backends.default import DefaultBackend
from registration.views import activate
from registration.views import register

# ... the rest of your urls until you find somewhere you want to add ...

url(r'^register/$', register,
    {'form_class' : YourRegistrationForm, 'backend': DefaultBackend},
    name='registration_register'),
Run Code Online (Sandbox Code Playgroud)