2013-06-18 3 views
0

У меня есть CreateView для создания клиента, но мне также нужно создать модель идентификации вместе с этим клиентом. У меня есть модель идентификации, которая имеет внешний ключ к модели, потому что нам нужно иметь возможность добавлять любое количество идентификаторов к некоторым (водительские права, паспорт и т. Д.)Django: Создайте две модели с CreateView

Anyways, текущий код (который создает только новый клиент) выглядит следующим образом:

class CustomerCreationView(CreateView): 
    template_name = "customers/customer_information.html" 
    form_class = CustomerInformationForm 

    def get_context_data(self, *args, **kwargs): 
     context_data = super(CustomerCreationView, self).get_context_data(*args, **kwargs) 

     context_data.update({ 
      'new_customer': True, 
     }) 

     return context_data 

CustomerInformationForm - ModelForm. Я хотел бы создать еще один ModelForm для идентификаторов, но я не знаю, как добавить вторую форму в CreateView. Я нашел this article, но ему 5 лет, а не о CreateView.

ответ

-1
class CustomerCreationView(CreateView): 
    template_name = "customers/customer_information.html" 
    form_class = CustomerInformationForm 
    other_form_class = YourOtherForm 

    def get_context_data(self, *args, **kwargs): 
     context_data = super(CustomerCreationView, self).get_context_data(*args, **kwargs) 

     context_data.update({ 
      'new_customer': True, 
      'other_form': other_form_class,  
     }) 

     return context_data 

Я думаю, что должно работать .. Я работаю, я не могу проверить это ..

+0

Но, когда вы выполняете POST, он создает только CustomerInformationForm, а не другой. – lalo

+0

Вы должны добавить пользовательский «def post (self, request, * args, ** kwargs):», который берет вашу форму и сохраняет данные. –

5

В случае, если кто-то имеет тот же самый вопрос. Вы можете использовать CreateWithInlinesView от django-extra-views. Код будет выглядеть так:

from extra_views import CreateWithInlinesView, InlineFormSet 


class IdentificationInline(InlineFormSet): 
    model = Identification 


class CustomerCreationView(CreateWithInlinesView): 
    model = CustomerInformation 
    inlines = [IdentificationInline] 
+1

. Мне вообще не нравится обращаться к третьим сторонам за «маленькими» вещами, такими как это, но я взглянул на это и несколько других предложений django-extra-views, и это похоже на очень хороший пакет. +1 –

Смежные вопросы