A common practice is to use 2 forms to achieve your goal.
-
A form for the
UserModel:class UserForm(forms.ModelForm): ... Do stuff if necessary ... class Meta: model = User fields = ('the_fields', 'you_want') -
A form for the
StudentModel: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.