【问题标题】:Django inlineformset_factory not saving or editing modelform with choicesDjango inlineformset_factory 不保存或编辑带有选项的模型表单
【发布时间】:2016-02-21 18:27:00
【问题描述】:

我正在尝试使用内联表单集来创建公司的开放和关闭时间,即周一到周五,每天都有不同的开放和关闭时间。

公司简介表格是常规的模型表格。 我在下面加载的公司时间是一个模型表单集,其 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))

【问题讨论】:

    标签: python django


    【解决方案1】:

    在此链接上回答:

    Django modelform not saving input choices and not returning errors

    问题来自将不同的数据类型保存到不同的模型字段类型。

    【讨论】:

      【解决方案2】:

      我认为您需要给 formset 一个查询集以显示您保存的实例:

      # 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 doc.

      【讨论】:

      • 仍在加载一个空的模型表单集。我需要做一些特别的事情来保存选定的选择吗?我在想我没有保存任何东西。
      • 或者你会更友善,实际上向我展示一个模型表单集的最小示例,其中包含保存和编辑的选项。我认为这对我来说已经足够了。
      • 我在你看来没有任何可疑之处,尽管你调用了一些多余的save()。你能在 shell 中查询一下你的表单集是否保存了任何东西吗?
      • 其实,我认为这是不对的:product.company = model_instance.id,试试product.company = model_instance。也不要这样称呼:hourformset.save(commit=False)instances = hourformset.save(),这没有任何帮助,因为您已经保存了单个表单。
      • 就像我怀疑的那样,我没有在小时表上保存任何东西。目前我在小时表上有 0 行,在公司表上有 1 行。
      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2011-09-06
      • 2010-12-29
      • 2016-02-24
      • 2020-01-28
      相关资源
      最近更新 更多