Django使用form.Save()保存多个对象

2024-06-17 15:43:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的应用程序中,必须有两个输入才能得到数字,当我单击给定范围内的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)

Tags: frompyformnumbermodelsrequestcreatetr
1条回答
网友
1楼 · 发布于 2024-06-17 15:43:27

您可以通过两种方式执行此操作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)

相关问题 更多 >