如何在Django中一次更新多个对象?

时间:2017-06-14 12:07:05

标签: python django updates multiple-instances

enter image description here

如图所示,我必须一次更新多个对象,例如更新每个对象的状态。如果状态为活动状态,则对象将显示在另一个页面上,反之亦然。目标是使用一个按钮更改一个对象(或全部)的状态。 目前,如果我点击'Update_all',我只得到一个值。

Django的Admin Page对多个对象采取行动将是一个很好的解决方案,但我不知道,虽然我考虑了模板的html代码,但是如何构建这个模板。

我尝试的另一次尝试 - 与上面的图像类似 - 就是这个:

我的模板

<div class="container">
{% if forms.items %}

{% for key,value in forms.items %}
<form class="custom-form-manage-habis" method="post" action="">
  {% csrf_token %}
<div class="container custom-div-manage-habits">
  {{key}}
  &emsp;
  {{value}}
</div>
<hr>
{% endfor %}

{% else %}
<p>There are no habits to manage.</p>
{% endif %}

<input type="submit" value="Apply changes" {% if not forms.items 
%}style="display:none"{% endif %} ></input>
</form>

</div>

......在我看来:

def post(self, request):
    print('postFuction')
    print(request.POST)
    form_collection = {}
    habit_update_list = request.POST.getlist('is_active')
    print(habit_update_list)
    habits = Habit.objects.filter(created_by=request.user.userprofile)

    i = 0
    for habit in habits:

        print('I: ' + str(i))
        form = HabitToManageForm(request.POST, instance=habit)
        if form.is_valid():
            habit = form.save(commit=False)
            habit.is_active = habit_update_list[i]
            print(habit)
            habit.save()

        else:
            print('Error while check if form is valid')
        i += 1
    return redirect('manage_habits')

这里的问题是我确实得到了对象的值,但是没有排序,因此我得到一个object2的值,这将保存在object4中。 那么,是否有一种常见的做法或最好的方法来处理这个问题?或者可能有人提示我采用django管理模板方法“选择一个对象,然后更改它”。

修改

表格:

class HabitToManageForm(forms.ModelForm):
    class Meta:
        model = Habit
        fields = ('is_active',)

0 个答案:

没有答案