在Django 1.7中为扩展的现有用户模型创建注册表单

时间:2015-03-14 15:37:52

标签: python django forms

我在models.py中创建了扩展用户模型,如下所示:

class Employee(models.Model):
    user = models.OneToOneField(User)
    customfield1 = models.CharField(max_length=100)
    customfield2 = models.CharField(max_length=100)

我想将这些字段添加到注册表单中。我分析了this topic。这是正确的解决方案,但我无法应用到我的网站。我设计了注册表,但我无法注册用户。我正在使用的代码在这里: forms.py(这是我的原始表单,但这不会将Employee数据保存到db中):

class AdvancedRegistrationForm(UserCreationForm):
    customfield = forms.CharField(max_length=100,label="Address")
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'email', 'customfield1', 'customfield2')
    def save(self, commit=True):
        user = super(AdvancedRegistrationForm, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.username = self.cleaned_data['username']
        user.email = self.cleaned_data['email']
        if commit:
            user.save()
        return user

views.py:

def register(request):
    if request.method == 'POST':
        form = AdvancedRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/../login")
    else:
        form = AdvancedRegistrationForm()
    return render_to_response("register.html", {
        "form": form,
    }, RequestContext(request))

forms.py(这是我根据此解决方案创建的表单,但它不注册/保存任何内容):

class AdvancedRegistrationForm(forms.ModelForm):
    def __init__(self, instance=None, *args, **kwargs):
        _fields = ('first_name', 'last_name', 'username', 'email', )
        _initial = forms.model_to_dict(instance.user, _fields) if instance is not None else {}
        super(AdvancedRegistrationForm, self).__init__(initial=_initial, instance=instance, *args, **kwargs)
        self.fields.update(forms.fields_for_model(User, _fields))
    class Meta:
        model = Employee
        exclude = ('user',)
    def save(self, *args, **kwargs):
        u = self.instance.user
        u.first_name = self.cleaned_data['first_name']
        u.last_name = self.cleaned_data['last_name']
        u.username = self.cleaned_data['username']
        u.email = self.cleaned_data['email']
        u.save()
        profile = super(AdvancedRegistrationForm, self).save(*args,**kwargs)
        profile.user = u
        profile.customfield = self.cleaned_data['customfield']
        return profile

0 个答案:

没有答案