Django inlineformset_factory 不保存或编辑带选项的 modelform

0 投票
2 回答
580 浏览
提问于 2025-05-10 15:37

我正在尝试使用一个内联表单集来设置公司的营业时间,也就是从周一到周五,每天的开关时间可能都不一样。

公司的基本信息表单是一个普通的模型表单。下面的公司营业时间是一个模型表单集,它的ID是从公司基本信息表单传过来的。

模型表单和模型表单集都能正常加载,用来创建数据也没问题。在编辑的时候,模型表单会显示之前选择的值,但模型表单集却不会。我不确定在创建的时候是否有保存任何数据,因为当我尝试编辑这个实例时,模型表单集是空的。

我应该做什么改变,才能确保模型表单集在保存选择的内容时,或者在编辑时能加载之前选择的内容呢?

def addprofile(request):
current_user = request.user
company = Company() ##To create new instance
#company = Company.objects.get(id= request.session['my_ids']) ## To get old instance
OpeningHourslineFormSet = inlineformset_factory(Company, OpeningHours, form=OpeningHoursForm, extra=7 )##fields=("weekday", "fromHour","fromMinute", "toHour", "toMinute")
if request.session['entry_count'] > 1:
    messages.success( request, 'You can only create two business profiles now' )
    return HttpResponseRedirect( reverse('home') )
else:
    if request.method == 'POST':
        hourformset = OpeningHourslineFormSet(request.POST, request.FILES, instance=company)
        form = CompanyForm(request.POST)
        ###### deal with hourformset here
        if form.is_valid():
            model_instance = form.save(commit=False)
            model_instance.pub_date= timezone.now()
            model_instance.user= current_user.id
            model_instance.save()
        else:
            print("companyform not saved")
            ###################
        if hourformset.is_valid():
            hourformset.save(commit=False)
            for product in hourformset:
                if product.is_valid():
                    product.save(commit=False) 
                    product.company = model_instance.id
                    product.save()

            instances = hourformset.save()
        else:
            print(" modelform not saved")


        return HttpResponseRedirect('/bizprofile/success')

    else:
        hourformset = OpeningHourslineFormSet(instance=company)
        form = CompanyForm()
    context = {'hourformset': hourformset, 'form': form}
    return render_to_response('bizprofile/addprofile.html', context, context_instance=RequestContext(request))

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

0

我觉得你需要给表单集合提供一个查询集,这样才能显示你保存的实例:

# hours is a queryset that you got from company, pseudo code here
hours = company.hours.all()
hourformset = OpeningHourslineFormSet(request.POST,
                                      request.FILES,
                                      queryset=hours)

django文档

0

这个链接里的回答:

Django的modelform没有保存输入的选项,也没有返回错误

问题出在把不同类型的数据保存到不同的模型字段类型上。

撰写回答