只需將HouseForm粘貼到PersonForm中,將其評估爲clean()過程的一部分,並將其作爲save()過程的一部分保存。也適用於modelformset。
class HouseForm(forms.modelForm):
""" Edit a house """
class Meta:
model = House
exclude =()
class PersonForm(forms.ModelForm):
""" Edit a person and her house """
class Meta:
model = Person
exclude =()
def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)
self.fields['house'].required = False
data = kwargs.get('data')
# 'prefix' parameter required if in a modelFormset
self.house_form = HouseForm(instance=self.instance and self.instance.house,
prefix=self.prefix, data=data)
def clean(self):
if not self.house_form.is_valid():
raise forms.ValidationError("House not valid")
def save(self, commit=True):
obj = super(PersonForm, self).save(commit=commit)
obj.house = self.house_form.save()
obj.save()
然後在您的標記:
<form ...>
{{ person_form }}
{{ person_form.house_form }}
</form>
不完全是。我想要做的是創建一個PersonForm,但它包含幾乎爲HouseForm的一個子表單。 – peterw