简体   繁体   English

如何在 Django 中向 UserCreationForm 添加字段?

[英]How to add fields to UserCreationForm in Django?

So I've been working on a Django project and I've hit a dead end.所以我一直在做一个 Django 项目,但我遇到了死胡同。 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:每次我尝试修改 UserCreationForm 以说明保险 ID 和/或提供商时,我都会遇到一个错误,提示我不能这样做:

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?我想知道是否有人可以告诉我如何将这些字段添加到表单中而不必覆盖我的 User 类?

''' 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.您没有正确引用表单中的insurance_idinsurance_provider字段。 Change the Meta class to:Meta类更改为:

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.您还需要在User模型中定义insurance_idinsurance_provider

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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