mardi 3 novembre 2015

How to add fields to UserCreationForm in Django?

So I've been working on a Django project and I've hit a dead end. Every time that I try to modify the UserCreationForm to account for Insurance ID and/or provider, I hit an error that says I cannot do this...

Unknown field(s) (Insurance Provider, Insurance ID) specified for User

I was wondering if anyone could tell me how to add these Fields to the form without having to override my User class? Thanks.

''' Form used in patient registration. Extends UserCreationForm '''
class PatientRegisterForm(UserCreationForm):
    email = EmailField(required = True)
    insurance_id = forms.CharField(required=True, label="Insurance ID")
insurance_provider = forms.CharField(required=True, label="Insurance Provider")
class Meta:
    model = User
    fields = ("email", "password1", "password2", "Insurance ID", "Insurance Provider")
def clean_password2(self):
    password1 = self.cleaned_data.get("password1")
    password2 = self.cleaned_data.get("password2")
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError(
            self.error_messages['password_mismatch'],
            code='password_mismatch',
        )
    return password2
def save(self, commit=True):
    user=super(UserCreationForm, self).save(commit=False)
    user.set_password(self.clean_password2())
    user.insurance_id = self.cleaned_data["insurance_id"]
    user.insurance_provider = self.cleaned_data["insurance_provider"]
    if commit:
        user.save()
    return user

''' This displays the patient login form. Unique because of insurance numbers '''
def patient_registration(request):
if request.POST:
    form = PatientRegisterForm(request.POST)
    if form.is_valid():
        new_user = form.save()
        new_patient = Patient(user = new_user)
        new_patient.save()
        temp= Event(activity= '\n'+new_patient.user.get_full_name()+" has registered as a patient ")
        temp.save()
        return HttpResponseRedirect('/login/') # TODO : Refer them to there home page
    else:
        return HttpResponseRedirect('/login/') # TODO : Ditto ^^^
else:
    form = PatientRegisterForm()
return render(request, "main_site/patient_registration.html", {
    "form":form,
})

Aucun commentaire:

Enregistrer un commentaire