python - django:使用表单集更新 dabatase 表
问题描述
我对表单集感到困惑。我构建了一个表单和一个视图来插入一个工作正常的数据库表行,并且我只是在视图中构建了一个表单集,以便能够一次插入多行。我的问题是表单集似乎不起作用。数据库中没有任何变化。
这是我的表格的样子:
class ProcurementOperationRecordForm(forms.ModelForm):
class Meta:
model = replenishment
fields = ('Id', 'Quantity', 'NetAmount', 'Supplier', 'SellPrice')
这是我以前的看法:
#def New_Purchase(request):
#if request.method == 'POST':
#form = ProcurementOperationRecordForm(request.POST)
#if form.is_valid():
#form.save()
#quantity = form.cleaned_data.get('Quantity')
#id = form.cleaned_data.get('Id')
#update = replenishment.objects.filter(Id = id).update(StockOnOrder =+ quantity)
#update2 = Item2.objects.filter(reference = id).update(en_cours_de_reception =+ quantity)
#quantity = form.cleaned_data.get('Quantity')
#id = form.cleaned_data.get('Id')
#update = replenishment.objects.filter(Id = id).update(StockOnOrder = (StockOnOrder + quantity))
#return redirect('/dash2.html')
#else:
#form = ProcurementOperationRecordForm()
#context = {'form': form,}
#return render(request, 'new_purchase.html', context)
这是我的表单集视图的样子:
def New_Purchase(request):
context = {}
form = formset_factory(ProcurementOperationRecordForm, extra = 3)
formset = form()
context['formset'] = formset
return render(request, 'new_purchase.html', context)
我不知道该怎么做才能使这个表单集起作用,有人有线索可以解除这种情况吗?
更新:我已经修改了我的表单集:
ef New_Purchase(request):
context = {}
form = formset_factory(ProcurementOperationRecordForm, extra = 3)
if request.method == POST:
formset = form(request.POST)
if formset.is_valid():
formset.save()
quantity = form.cleaned_data.get('Quantity')
id = form.cleaned_data.get('Id')
update = replenishment.objects.filter(Id = id).update(StockOnOrder =+ quantity)
update2 = Item2.objects.filter(reference = id).update(en_cours_de_reception =+ quantity)
return redirect('/dash2.html')
else:
form = formset_factory(ProcurementOperationRecordForm, extra = 3)
context['formset'] = form
return render(request, 'new_purchase.html', context)
但现在我得到了错误:
AttributeError at /new_purchase.html
'ProcurementOperationRecordFormFormSet' object has no attribute 'save'
更新 2:
我得到它有点工作这样做:
def New_Purchase(request):
context = {}
form = modelformset_factory(replenishment, form=ProcurementOperationRecordForm, max_num= 4,extra = 3)
if request.method == 'POST':
formset = form(request.POST)
if formset.is_valid():
formset.save()
quantity = form.cleaned_data.get('Quantity')
id = form.cleaned_data.get('Id')
update = replenishment.objects.filter(Id = id).update(StockOnOrder =+ quantity)
update2 = Item2.objects.filter(reference = id).update(en_cours_de_reception =+ quantity)
return redirect('/dash2.html')
else:
form = modelformset_factory(replenishment, form=ProcurementOperationRecordForm, extra = 3)
context['formset'] = form
return render(request, 'new_purchase.html', context)
尽管我尝试指定文档中提到的最大行参数,但此视图会输出整个补货表内容。我试图让只有 3 或 4 个空行将它们插入到补货表中。任何帮助将不胜感激!
解决方案
您的表单和表单集之间有两个主要区别。当您使用表单时,您会为表单提供用户数据form = ProcurementOperationRecordForm(request.POST)
,而当您使用表单集时,您不会。将您的代码更改为formset = form(request.POST)
并且您检查用户数据并将其保存到数据库中,如果它是正确的
if form.is_valid():
form.save()
对表单集做同样的事情
if formset.is_valid():
formset.save()
你需要formset_factory
改为modelformset_factory
modelformset_factory(replenishment, form=ProcurementOperationRecordForm, extra = 3)
当您修改代码时,您也需要修改更新。您需要为表单集中的每个表单执行此操作
for check_form in formset:
quantity = check_form .cleaned_data.get('Quantity')
id = check_form .cleaned_data.get('Id')
update = replenishment.objects.filter(Id = id).update(StockOnOrder =+ quantity)
update2 = Item2.objects.filter(reference = id).update(en_cours_de_reception =+ quantity)
推荐阅读
- tableau-api - 如何在 Tableau Online 中运行带有 .hyper 数据提取的 Tableau 工作簿?
- html - 在闪亮的 flowLayout 中创建动态数量的卡片元素
- c# - 如何为自定义按钮设置视觉状态
- javascript - 从点击事件的 JSON 循环中获取单个值 [jQuery/JavaScript]
- angular - Angular 6 订阅不会刷新 UI
- php - 在一个查询中更新两个表
- jekyll - 如何在 Jekyll 文件的包含语句中使用变量?
- html - 有一些边界问题
- java - 通过选择分隔符将二维数组转换为字符串
- php - 只有定义了变量,我如何才能使用它?