[英]How to handle inline formset in post method of generic CreateView?
我有一個表單和內聯表單集,都在同一頁面上以更新廣告和圖片 model。 這是代碼:
class AdCreateView(CreateView):
form_class = AdForm
template_name = 'main/ad_create.html'
success_url = '/ads'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['picture_form'] = ImageFormset()
return context
def post(self, request, *args, **kwargs):
form = ????
picture_form = ???
if form.is_valid() and picture_form.is_valid():
**somehow save data from both forms to DB.**
???
return ?
所以問題是,如何在 post 方法中獲取內聯表單集並驗證並保存它? 我應該返回什么?
我的意思是這是一種正確的方法,或者也許還有其他方法可以做到這一點。
這是我使用的一種方式。 如果您不理解以下代碼中的某些內容,請隨時提出任何問題。
class LeadCreate(CreateView):
model = Leads
form_class = LeadsForm
template_name = 'Lead/create.html'
success_url = reverse_lazy('leadlist')
def get_context_data(self, **kwargs):
data = super(LeadCreate, self).get_context_data(**kwargs)
if self.request.POST:
data['leadqualifications'] = LeadQualificationFormSet(self.request.POST)
data['leademployments'] = LeadEmploymentFormSet(self.request.POST)
data['leadreferences'] = LeadReferenceFormSet(self.request.POST)
data['leadkins'] = LeadKinFormSet(self.request.POST)
else:
data['leadqualifications'] = LeadQualificationFormSet()
data['leademployments'] = LeadEmploymentFormSet()
data['leadreferences'] = LeadReferenceFormSet()
data['leadkins'] = LeadKinFormSet()
return data
def form_valid(self, form):
user = self.request.user
form.instance.added_by = user
context = self.get_context_data()
leadqualificationsforms = context['leadqualifications']
leademploymentsforms = context['leademployments']
leadreferencesforms = context['leadreferences']
leadkinsforms = context['leadkins']
with transaction.atomic():
form.instance.Lead = self.request.user
self.object = form.save()
if leadqualificationsforms.is_valid():
leadqualificationsforms.instance = self.object
leadqualificationsforms.save()
else:
print('qulification form is invalid')
self.object.delete()
return super(LeadCreate, self).form_invalid(form)
if leademploymentsforms.is_valid():
leademploymentsforms.instance = self.object
leademploymentsforms.save()
else:
print('employment form is invalid')
self.object.delete()
return super(LeadCreate, self).form_invalid(form)
if leadreferencesforms.is_valid():
leadreferencesforms.instance = self.object
leadreferencesforms.save()
else:
print('referencesforms form is invalid')
self.object.delete()
return super(LeadCreate, self).form_invalid(form)
if leadkinsforms.is_valid():
leadkinsforms.instance = self.object
leadkinsforms.save()
else:
print('Kin form is invalid')
self.object.delete()
return super(LeadCreate, self).form_invalid(form)
usergroup=self.request.user.get_user_group()
if usergroup.name == "agent":
print('usergroup agent',usergroup)
form.instance.Agent=self.request.user
form.instance.Status=Student_status[-1][0]
elif usergroup.name == "staff":
form.instance.Responsible=self.request.user
form.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self,form):
return super(LeadCreate, self).form_invalid(form)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.