django基于类的视图,带有内联模型形式或表单集 [英] django class-based views with inline model-form or formset
问题描述
我有以下模型:
类Bill(models.Model):
date = models.DateTimeField (_(Date of bill),null = True,blank = True
类项目(models.Model):
name = models.CharField(_(Name) ,max_length = 100)
price = models.FloatField(_(Price))
quantity = models.IntegerField(_(Quantity))
bill = models.ForeignKey( Bill,verbose_name = _(Bill),
related_name =billitem)
我知道这是可能的:
from django.forms.models import inlineformset_factory
inlineformset_factory(Bill,Item)
然后通过标准视图处理。
现在我想知道,如果有一种方法来实现相同的(意思是:使用inline添加/编辑属于账单的项目)使用基于类的视图(而不是用于管理界面)。
要点是:
-
生成
FormSet $ c $使用
inlineformset_factory
BookImageFormSet = inlineformset_factory(BookForm,BookImage,extra = 2)
/ pre>
BookPageFormSet = inlineformset_factory(BookForm,BookPage,extra = 5)
-
在
CreateView $ c中返回
FormSet
code> c $ c> class.py $ / code code code code $ c $ ,** kwargs):
context = super(BookCreateView,self).get_context_data(** kwargs)
如果self.request.POST:
上下文['bookimage_form'] = BookImageFormSet(self
上下文['bookpage_form'] = BookPageFormSet(self.request.POST)
else:
上下文['bookimage_form'] = BookImageFormSet()
上下文[ 'bookpage_form'] = BookPageFormSet()
返回上下文
-
使用
form_valid
保存表单和表单:上下文= self.get_context_data()
bookimage_form = context ['bookimage_formset']
bookpage_form = context ['bookpage_formset']
如果bookimage_form .is_valid()和bookpage_form.is_valid():
self.object = form.save()
bookimage_form.instance = self.object
bookimage_form.save()
bookpage_form。 instance = self.object
bookpage_form.save()
返回HttpResponseRedirect('thanks /')
else:
返回self.render_to_response(self.get_context_data(form = form))
I have the following models:
class Bill(models.Model):
date = models.DateTimeField(_("Date of bill"),null=True,blank=True)
class Item(models.Model):
name = models.CharField(_("Name"),max_length=100)
price = models.FloatField(_("Price"))
quantity = models.IntegerField(_("Quantity"))
bill = models.ForeignKey("Bill",verbose_name=_("Bill"),
related_name="billitem")
I know that this is possible:
from django.forms.models import inlineformset_factory
inlineformset_factory(Bill, Item)
and then process this via standard view.
Now I was wondering, if there is a way to achieve the same (meaning: using a inline for adding/editing items belonging to a bill) using class based views (not for the admin-interface).
Key points is:
generated
FormSet
s withinforms.py
usinginlineformset_factory
:BookImageFormSet = inlineformset_factory(BookForm, BookImage, extra=2) BookPageFormSet = inlineformset_factory(BookForm, BookPage, extra=5)
returned the
FormSet
s within aCreateView
class inviews.py
:def get_context_data(self, **kwargs): context = super(BookCreateView, self).get_context_data(**kwargs) if self.request.POST: context['bookimage_form'] = BookImageFormSet(self.request.POST) context['bookpage_form'] = BookPageFormSet(self.request.POST) else: context['bookimage_form'] = BookImageFormSet() context['bookpage_form'] = BookPageFormSet() return context
Used
form_valid
to save the form and formset:def form_valid(self, form): context = self.get_context_data() bookimage_form = context['bookimage_formset'] bookpage_form = context['bookpage_formset'] if bookimage_form.is_valid() and bookpage_form.is_valid(): self.object = form.save() bookimage_form.instance = self.object bookimage_form.save() bookpage_form.instance = self.object bookpage_form.save() return HttpResponseRedirect('thanks/') else: return self.render_to_response(self.get_context_data(form=form))
这篇关于django基于类的视图,带有内联模型形式或表单集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!