Как создать объект формы из 2 разных модельных объектов в Django?

У меня есть 2 объекта, оба из разных классов Model, и я хочу показать форму, содержащую несколько полей из каждого. Как я могу это сделать?

12.12.2008 22:57:40
3 ОТВЕТА

Я никогда не пробовал этого, но вы могли бы иметь два класса ModelForm, определенных в вашем коде, а затем создать новый простой Formкласс, который __init__создал его копию ModelFormи скопировал поля в себя.

Что-то вроде:

class DualForm(forms.Form):
    def __init__(self, *args, **kwargs):
        model1 = Model1Form(**kwargs)
        model2 = Model2Form(**kwargs)

        for f in model1.fields:
            self.fields[f] = model1.fields[f]

        for f in model2.fields:
            self.fields[f] = model2.fields[f]

class Model1Form(forms.ModelForm):
    ... your model form...

class Model2Form(forms.ModelForm):
    ... your other model form...

Я не понимаю, почему это не сработает.

Просто убедитесь, что вы передаете аргументы данных в ModelFormsисключения и ловушку и всплывающее сообщение ... Я также не уверен, что произойдет, если у вас есть конфликтующие имена полей. Это может быть хлопотно ...

-2
13.12.2008 00:05:59
И это именно тот тип склонности к ошибкам, к которому приходят люди, когда считают, что все нужно сжать в один объект формы ... просто используйте два!
Carl Meyer 13.12.2008 16:21:24

Я делаю это, создавая два ModelFormкласса, которые используют fieldsатрибут Meta, чтобы указать, какое подмножество полей использовать для отображения в форме. Я отображаю обе формы в шаблоне и обрабатываю их в представлении.

5
13.12.2008 15:00:04
Это правильный ответ. Объекты Django Form / ModelForm не равны HTML-формам, они просто наборы полей; вы сами заключаете их в тег <form>. Не вдавайтесь в искажения, сжимая все в одну Form / ModelForm, используйте столько, сколько вам нужно, и помещайте их все в одну HTML-форму.
Carl Meyer 13.12.2008 16:20:10

Просто создайте 2 отдельные формы, проблема с подходом парня выше заключается в том, что вы потеряете .save (). Формы действительно предназначены для представления одного единого набора данных, данные для каждой из ваших моделей на самом деле являются отдельным набором данных. Вот почему формы не включают тег при визуализации.

0
15.12.2008 19:37:11