【问题标题】:Django - Save multiple object with form.save()Django - 使用 form.save() 保存多个对象
【发布时间】:2020-07-23 11:35:53
【问题描述】:

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

【问题讨论】:

  • 你想多次创建什么对象?
  • 你想多次创建Blank对象?
  • @arjun,是的,但是在每个循环中空白的系列必须更改。范围开始和结束之间的数字必须分配给系列
  • 什么是空白系列?空白系列会有什么变化?
  • @arjun,天啊,伙计!如果您想提供帮助,请查看代码。

标签: python django django-models django-forms django-views


【解决方案1】:

您可以通过两种方式做到这一点 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2014-11-23
    • 2010-11-14
    • 1970-01-01
    • 2010-12-28
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多