При использовании форм моделей я не думаю, что можно ссылаться более чем на одну модель для каждой модели.Вы можете создать пользовательскую форму из форм. Форма для обработки проверки.Когда это подходит мне, я обычно просто использую две / три / четыре модели, потому что мне нравится согласованность, и это облегчает управление на уровне шаблона.
Для вашего второго вопроса вам нужно переопределить чистоту() метод модели, о которой вы заботитесь.Вот пример того, что я написал недавно:
def clean(self):
cleaned_data = self.cleaned_data
npv = cleaned_data.get("npv")
irr = cleaned_data.get("irr")
if npv == irr:
raise forms.ValidationError('Must have either an NPV or IRR entry.')
if (npv != None) and (irr != None):
raise forms.ValidationError('Must have only one entry, either NPV or IRR.')
return cleaned_data
Есть также документы по переопределению clean:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overiding-clean-on-a-model-formset
Редактировать:
Под этим «я обычно использую две / три / четыре формы модели» я подразумеваю, что я создаю модели формы для каждой модели.Я создаю их экземпляр на уровне представления и отправляю их как часть контекста в шаблон:
a = ModelFormA()
b = ModelFormB()
c = ModelFormC()
c = {'a':a,'b':b,'c':c}
return rendertoresponse('template.html',c)
, если некоторые из ваших моделей имеют одинаковые имена столбцов, просто используйте префиксный аргумент при создании экземпляра.
Документы по префиксу находятся здесь:
https://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms
, тогда вы можете просто передать request.POST в каждую форму модели, не разбирая поля по отдельности.