.
This commit is contained in:
@@ -90,6 +90,43 @@ class AnatomyQuestionForm(ModelForm):
|
|||||||
queryset=Exam.objects.all(),
|
queryset=Exam.objects.all(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Only in case we build the form from an instance
|
||||||
|
# (otherwise, 'toppings' list should be empty)
|
||||||
|
if kwargs.get('instance'):
|
||||||
|
# We get the 'initial' keyword argument or initialize it
|
||||||
|
# as a dict if it didn't exist.
|
||||||
|
initial = kwargs.setdefault('initial', {})
|
||||||
|
# The widget for a ModelMultipleChoiceField expects
|
||||||
|
# a list of primary key for the selected data.
|
||||||
|
initial['exams'] = [t.pk for t in
|
||||||
|
kwargs['instance'].exams_set.all()]
|
||||||
|
|
||||||
|
ModelForm.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def save(self, commit=True):
|
||||||
|
# Get the unsaved Pizza instance
|
||||||
|
instance = ModelForm.save(self, False)
|
||||||
|
|
||||||
|
# Prepare a 'save_m2m' method for the form,
|
||||||
|
old_save_m2m = self.save_m2m
|
||||||
|
|
||||||
|
def save_m2m():
|
||||||
|
old_save_m2m()
|
||||||
|
# This is where we actually link the pizza with toppings
|
||||||
|
instance.exams_set.clear()
|
||||||
|
for exam in self.cleaned_data['exams']:
|
||||||
|
instance.exams_set.add(exam)
|
||||||
|
|
||||||
|
self.save_m2m = save_m2m
|
||||||
|
|
||||||
|
# Do we need to save all changes now?
|
||||||
|
if commit:
|
||||||
|
instance.save()
|
||||||
|
self.save_m2m()
|
||||||
|
|
||||||
|
return instance
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = AnatomyQuestion
|
model = AnatomyQuestion
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user