简体   繁体   中英

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?

''' 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})

You are not correctly referring to the insurance_id and insurance_provider fields in your form. Change the Meta class to:

class Meta:
    model = User
    fields = ("email", "password1", "password2", "insurance_id", "insurance_provider")  
    # Note: the last two fields have changed

You will also need to have defined insurance_id and insurance_provider in your User model.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM