如图所示,我必须一次更新多个对象,例如更新每个对象的状态。如果状态为活动状态,则对象将显示在另一个页面上,反之亦然。目标是使用一个按钮更改一个对象(或全部)的状态。 目前,如果我点击'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}}
 
{{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',)