A common practice is to use 2 forms to achieve your goal.
-
A form for the
User
Model:class UserForm(forms.ModelForm): ... Do stuff if necessary ... class Meta: model = User fields = ('the_fields', 'you_want')
-
A form for the
Student
Model:class StudentForm (forms.ModelForm): ... Do other stuff if necessary ... class Meta: model = Student fields = ('the_fields', 'you_want')
-
Use both those forms in your view (example of usage):
def register(request): if request.method == 'POST': user_form = UserForm(request.POST) student_form = StudentForm(request.POST) if user_form.is_valid() and student_form.is_valid(): user_form.save() student_form.save()
-
Render the forms together in your template:
<form action="." method="post"> {% csrf_token %} {{ user_form.as_p }} {{ student_form.as_p }} <input type="submit" value="Submit"> </form>
Another option would be for you to change the relationship from OneToOne
to ForeignKey
(this completely depends on you and I just mention it, not recommend it) and use the inline_formsets
to achieve the desired outcome.