erikbwork và tôi cả hai đã có những vấn đề mà người ta chỉ có thể bao gồm một mô hình thành một generic Lớp Dựa Lượt xem. Tôi tìm thấy một cách tương tự như tiếp cận nó như Miao, nhưng mô đun hơn.
Tôi đã viết một Mixin để bạn có thể sử dụng tất cả các Chế độ xem dựa trên lớp chung. Xác định mô hình, trường và bây giờ cũng child_model và child_field - và sau đó bạn có thể bọc các trường của cả hai mô hình trong một thẻ như mô tả Zach.
class ChildModelFormMixin:
''' extends ModelFormMixin with the ability to include ChildModelForm '''
child_model = ""
child_fields =()
child_form_class = None
def get_child_model(self):
return self.child_model
def get_child_fields(self):
return self.child_fields
def get_child_form(self):
if not self.child_form_class:
self.child_form_class = model_forms.modelform_factory(self.get_child_model(), fields=self.get_child_fields())
return self.child_form_class(**self.get_form_kwargs())
def get_context_data(self, **kwargs):
if 'child_form' not in kwargs:
kwargs['child_form'] = self.get_child_form()
return super().get_context_data(**kwargs)
def post(self, request, *args, **kwargs):
form = self.get_form()
child_form = self.get_child_form()
# check if both forms are valid
form_valid = form.is_valid()
child_form_valid = child_form.is_valid()
if form_valid and child_form_valid:
return self.form_valid(form, child_form)
else:
return self.form_invalid(form)
def form_valid(self, form, child_form):
self.object = form.save()
save_child_form = child_form.save(commit=False)
save_child_form.course_key = self.object
save_child_form.save()
return HttpResponseRedirect(self.get_success_url())
Ví dụ Cách sử dụng:
class ConsumerRegistrationUpdateView(UpdateView):
model = Registration
fields = ('firstname', 'lastname',)
child_model = ConsumerProfile
child_fields = ('payment_token', 'cart',)
Hoặc với ModelFormClass:
class ConsumerRegistrationUpdateView(UpdateView):
model = Registration
fields = ('firstname', 'lastname',)
child_model = ConsumerProfile
child_form_class = ConsumerProfileForm
Done. Hy vọng rằng sẽ giúp một ai đó.
Bản sao có thể có của [Django: nhiều mô hình trong một mẫu sử dụng biểu mẫu] (http://stackoverflow.com/questions/569468/django-multiple-models-in-one-template-using-forms) –