3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以只在一個(gè)<form>html元素的模板中顯示兩種形式。然后,只需在視圖中分別處理表單即可。您仍然可以使用form.save()而不需要處理數(shù)據(jù)庫(kù)加載和保存您自己。
在這種情況下,您不需要它,但是如果您要使用具有相同字段名的表單,請(qǐng)查看prefixdjango表單的kwarg。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
我和erikbwork都有一個(gè)問(wèn)題,即一個(gè)模型只能包含在一個(gè)通用的基于類(lèi)的視圖中。我找到了類(lèi)似苗的類(lèi)似方法,但是更加模塊化。
我寫(xiě)了一個(gè)Mixin,因此您可以使用所有通用的基于類(lèi)的視圖。定義模型,字段,現(xiàn)在還定義child_model和child_field-然后可以將兩個(gè)模型的字段包裝在標(biāo)簽中,如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())
用法示例:
class ConsumerRegistrationUpdateView(UpdateView):
model = Registration
fields = ('firstname', 'lastname',)
child_model = ConsumerProfile
child_fields = ('payment_token', 'cart',)
或使用ModelFormClass:
class ConsumerRegistrationUpdateView(UpdateView):
model = Registration
fields = ('firstname', 'lastname',)
child_model = ConsumerProfile
child_form_class = ConsumerProfileForm
做完了 希望能對(duì)某人有所幫助。
添加回答
舉報(bào)