Django-更新的数据未保存到数据库

时间:2020-07-27 10:27:35

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

我想在给定范围内更改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

3 个答案:

答案 0 :(得分:0)

尝试一下:

在更新方法中使用:

ModuleNotFoundError: No module named 'kivy'

答案 1 :(得分:0)

看来还可以! 尝试调试

p.s。而不是使用循环 试试这个:

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中的obj:每个obj是空白模型的类型 为了使您的代码正常工作,请确保您要传递的obj的ID 要在form.py中的for循环中更新

我认为这肯定会起作用

答案 2 :(得分:0)

此代码段似乎有问题

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
        )

Blank.objects.update( branch = shared_blank.branch ) 您要更新分支值的id obj在这里未定义 尝试在obj中也传递id

相关问题