编辑具有多个实例的inlineformset_factory
问题描述:
我有一个内嵌的formset,其中extra = 24是一天中的小时。 我没有任何问题,添加新的条目并保存编辑具有多个实例的inlineformset_factory
OreSommInlineFormSet = inlineformset_factory(FarmacoGiornaliero, OreSomministrazione,
form=OreForm, fields=('ore','farmaco', 'quantita'),
extra=24, can_delete=False)
myospite = Ospite.objects.filter(cognome=cognome).filter(nome=nome)[0]
if request.method == 'POST':
form = GiornalieroForm(request.POST)
formset = OreSommInlineFormSet(request.POST, prefix='formset')
if form.is_valid() and formset.is_valid():
giornaliero=form.save(commit=True)
for form in formset.forms:
ora = form.save(commit=False)
ora.farmaco = giornaliero
ora.ospite = myospite
ora.save()
我试图找出如何我可以编辑和保存的表单集的数据。我有一个查询集,返回应该填充formset的OreFarmaco的24个实例,但formset本身只有一个instance关键字。
OreSommInlineFormSet = inlineformset_factory(FarmacoGiornaliero,OreSomministrazione, 形式= OreForm,字段=( '矿', 'quantita'), 额外= 24,can_delete = FALSE)
myospite = Ospite.objects.filter(cognome=cognome).filter(nome=nome)[0]
locfarmaco = Farmaco.objects.filter(farmaco=farmaco)[0]
giornaliero = FarmacoGiornaliero.objects.select_related() \
.filter(ospite=myospite) \
.filter(farmaco=locfarmaco)[0]
orefarmaco = OreSomministrazione.objects.select_related().filter(farmaco=giornaliero).filter(ospite=myospite)
if request.method == "POST":
form = GiornalieroForm(request.POST, instance=giornaliero)
formset = OreSommInlineFormSet(request.POST, prefix='formset', instance=orefarmaco[0])
if form.is_valid() and formset.is_valid():
giornaliero=form.save(commit=True)
formset.save()
谢谢。
答
//try to rewrite this codes it's complicated. Use get() instead
myospite = Ospite.objects.filter(cognome=cognome).filter(nome=nome)[0]
locfarmaco = Farmaco.objects.filter(farmaco=farmaco)[0]
giornaliero = FarmacoGiornaliero.objects.select_related() \
.filter(ospite=myospite) \
.filter(farmaco=locfarmaco)[0]
//
if request.method == "POST":
form = GiornalieroForm(request.POST, instance=giornaliero)
if form.is_valid():
gio = form.save(commit=True)
formset = OreSommInlineFormSet(request.POST, instance=gio)
if formset.is_valid()
gio.save()
formset.save()
当你说get(),你的意思是使用主键或id来检索数据?我的表单作为formset的24个附加项的列表,用户可以更改所有这些值。我怎么能按照你所建议的方式一一处理呢? – vince 2013-02-28 16:13:01
是的,但你也可以使用get in all fields。 get()函数将返回一个数据。尝试改变过滤器来获取。例如,像这样:myospite = Ospite.objects.get(cognome = cognome,nome = nome) – catherine 2013-02-28 16:23:47
好的,我会这么做的。那么formset呢?我是否必须更改我的HTML以适合您建议的鳕鱼? – vince 2013-02-28 16:28:04