Django单个对象在for循环中更新

时间:2018-07-12 16:31:54

标签: django django-models django-views

嗨,我想知道是否有可能或如何使用object.filter(pk=id).update(name='name')函数通过其ID更新for循环内的单个模型对象名称 我尝试这样做,但是在for循环中不起作用。它仅在循环外工作

编辑

我的for循环编辑视图: 首先,我基于数据库准备数据。可以通过其他方法修改数据,因此我将其保留在全局列表schedule_table中。 保存项目对象时,我想使用for循环更新schedule_table表示的其他数据。

def ProjectEditView(request, pk):

project = get_object_or_404(Project, pk=17)

schedule_table_load_form_db(project)#preparing list with data
Task_Schedule_TableView(request)

project_form = ProjectForm(request.POST or None, instance=project)

project_form_valid = project_form.is_valid()

if project_form_valid:
    with transaction.atomic():

        # save form in DB
        project = project_form.save(commit=False)
        project.save()

        # modify other object based on changed list schedule_table
        if schedule_table.__len__() > 0:
            #my for loop
            for p in schedule_table:
                team = Team.objects.get(name=p.team)

                phase = Phase.objects.filter(pk=p.pk).update(name=p.name,
                                                             project=project,
                                                             team=team,
                                                             order=p.order,
                                                             duration=p.duration,
                                                             prev=p.prev,
                                                             start=p.start,
                                                             end=p.end)



    # some other staff..... outside the loop

    return redirect('Project:ProjectListView')

context = {'project_form': project_form}
return render(request, 'Project/test.html', context)

使用数据准备列表的功能:

def schedule_table_load_form_db(project):
global schedule_table
schedule_table = []

phases = Phase.objects.filter(project=project)
for phase in phases:
    tasks_list = Task.objects.filter(phase=phase)
    tasks = []
    for task in tasks_list:
        task_dict = Task_dictionary.objects.get(pk=task.task_dictionary.pk)
        tmp = ''
        for e in task.employers.employer.all():
            user = User.objects.get(pk=e.user_id)
            tmp += user.first_name + ' ' + user.last_name + ','
        tasks.append(TableTask(pk=task.pk,
                               order=task.order,
                               name=task.name,
                               duration=task.duration,
                               employer=tmp,
                               start=task.start,
                               end=task.end,
                               min_employers_nr=task_dict.min_employers_nr,
                               max_employers_nr=task_dict.max_employers_nr,
                               prev=task.prev_task,
                               ))

    schedule_table.append(TablePhase(pk=phase.pk,
                                     name=phase.name,
                                     duration=0.0,
                                     start=phase.start,
                                     end=phase.end,
                                     team=phase.team.name,
                                     task=tasks,
                                     order=schedule_table.__len__(),
                                     prev=phase.prev
                                     ))

0 个答案:

没有答案