I ran across an issue today that, in hindsight, was simple and probably a result of not reading the Django documentation thoroughly enough. I'm definitely still in the "learning" phase of my relationship with Django.
Consider this (imperfect) example: you're using a ModelForm to allow users of your web app to create a Student. The user would supply the student's name, date of birth, and address in a form, but the student ID should be generated based on their other information (e.g. name and date of birth).
The ModelForm object won't give you access to the underlying Model's student_id field unless you include it with the form, which is undesirable. You could also save the Student to the database, then update its student_id field, but that's pretty inefficient. The better solution:
# Model class Student(models.Model): student_id = models.CharField() name = models.CharField() dob = models.DateField() address = models.CharField() # ModelForm class AddStudentForm(forms.ModelForm): class Meta: model = Student # don't include student_id fields = ['name', 'birthday', 'address'] # View def add_student(request): ... if form.is_valid(): # this will gave you an instance of the Student model without saving it to the db student = form.save(commit=False) # then you can create the student_id and save to the db student.student_id = create_id(student.name, student.dob) student.save() ....