python - Django - 使用 form.save() 保存多个对象
问题描述
在我的应用程序中,必须有两个输入将获取数字,并且当我单击create
给定范围内的按钮(写入输入)时,必须创建该数字次对象的差异。例如,在第一个输入中我将写“2”,在第二个“5”中,必须创建 3 个对象。这是我的代码:
models.py
:
class Blank(models.Model):
blank_series = models.CharField(_('Blankın seriyası'), max_length=3)
number_from = models.IntegerField()
number_to = models.IntegerField()
def __str__(self):
return self.blank_series
forms.py
:
from django.forms import ModelForm
from .models import Blank
class CreateBlankForm(ModelForm):
class Meta:
model = Blank
fields = '__all__'
html
:
<tr>
<td>{{ form.blank_series.label }}</td>
<td>{{ form.blank_series }}</td>
</tr>
<tr>
<td>{{ form.blank_number.label }}</td>
<td>
{{ form.number_from }}
{{ form.number_to }}
</td>
</tr>
<tr>
<td class="create-blank-btns">
<button class="create-blank-btn"><span class="material-icons">add_circle_outline</span><input type="submit" value="Əlavə et" name="create-blank"></button>
</td>
</tr>
views.py
:
@login_required(login_url='sign-in')
def blanks(request):
if request.method == 'POST':
form = CreateBlankForm(request.POST)
if form.is_valid():
form.save()
else:
form = CreateBlankForm()
blanks = Blank.objects.all()
context = {
'form': form,
'blanks': blanks,
}
return render(request, 'blank.html', context)
解决方案
您可以通过两种方式执行此操作 1)覆盖模型表单中的保存方法 2)在视图中获取已清理的数据并多次保存
1)在模型表单中覆盖模型表单中的保存方法
class CreateBlankForm(ModelForm):
class Meta:
model = Blank
fields = '__all__'
def save(self, *args, **kwargs):
times = self.number_to - self.number_from
for i in times:
super(CreateBlankForm).save(*args, **kwargs)
2)在视图上获取清理后的数据获取清理后的数据并在保存方法中循环
@login_required(login_url='sign-in')
def blanks(request):
if request.method == 'POST':
form = CreateBlankForm(request.POST)
if form.is_valid():
times = form.cleanded_data['number_to'] - form.cleaned_data['number_from']
for i in times:
form.save()
else:
form = CreateBlankForm()
blanks = Blank.objects.all()
context = {
'form': form,
'blanks': blanks,
}
return render(request, 'blank.html', context)
推荐阅读
- javascript - 如何仅在反应中渲染子组件
- c# - 如何解决excel文件SSIS中的整数日期问题
- components - 如何使组件实例从 Adobe XD 中的主组件继承链接?
- hyperledger-fabric - 关于频道创建过程的问题
- python - 从熊猫df中的特定值返回系列
- javascript - 联系表格在新页面上而不是在 div (ajax) 中显示确认
- powershell - 接受用户名并检查安全组的 Powershell 脚本
- javascript - 用圆形SVG绘制一组内接的菱形
- nomad - nomad 什么时候限制任务?
- android - 如何修复 FAB 内部活动?