首页 > 解决方案 > Django - 更新的数据未保存到数据库

问题描述

我想在给定范围内更改模型Branch字段。Blank例如,将Blank模型的Branch字段从 1 更改为 3。这是我的代码:

views.py

@login_required(login_url='sign-in')
def blanks(request):

    if request.method == 'POST' and 'create-blank' in request.POST:
        form = CreateBlankForm(request.POST)
        if form.is_valid():
            form.save()
    # here happens updating process
    elif request.method == 'POST' and 'share-blank' in request.POST:
        form = CreateBlankForm(request.POST)
        if form.is_valid():
            form.update()
    else:  
        form = CreateBlankForm()

    blank_list = Blank.objects.all().order_by('-created')

    context = {
        'form': form,
    }
    return render(request, 'blank.html', context)

forms.py

class CreateBlankForm(ModelForm):
    def save(self, commit=False):
        blank = super(CreateBlankForm, self).save(commit=False)
        number_of_objects = range(blank.number_from, blank.number_to+1)

        for i in number_of_objects:
            Blank.objects.create(
                blank_series = blank.blank_series,
                blank_number = i,
                branch=blank.branch,
                number_from = blank.number_from,
                number_to = blank.number_to                
            )

    def update(self, commit=False):
        shared_blank = super(CreateBlankForm, self).update(commit=False) 
        number_of_objects = range(shared_blank.number_from, shared_blank.number_to+1)

        for i in number_of_objects:
            Blank.objects.update(
                branch=shared_blank.branch
            )

models.py

class Blank(models.Model):
    blank_series = models.CharField(_('Blankın seriyası'), max_length=3)
    blank_number = models.IntegerField(_('Blankın nömrəsi'), blank=True, null=True)

    branch = models.ForeignKey(Branch, on_delete=models.CASCADE, blank=True, null=True)

    number_from = models.IntegerField()
    number_to = models.IntegerField()


    def __str__(self):
        return self.blank_series

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-templates

解决方案


好像没问题!尝试调试

ps 而不是使用 for 循环试试这个:

update_arr = []
for obj in number_of_objects:
   obj.branch = shared_blank.branch
   update_arr.append(obj)

Blank.objects.bulk_update(update_arr, ['branch'])

尝试使用批量更新而不是多次调用更新方法,并确保在 number_of_objects 中的 for obj:每个 obj 都是空白模型的类型,以正确运行您的代码确保您传递要在表单中的 for 循环中更新的 obj 的id 。 py

我认为这肯定会奏效


推荐阅读