2015-10-29 98 views
1

我有一个模型,我想用相同的'substage'字段值更新多个对象字段'值'。目前我知道如何使用UpdateView更新一个对象字段'值',但我不知道如何为具有相同'substage'编号的多个对象执行此操作。我应该使用表格吗?django多个对象更新

class ZoneSubStage(models.Model): 
    substage = models.ForeignKey(SubStage) 
    value = models.PositiveSmallIntegerField(default=0) 

这是我目前做:

class ZoneSubStageUpdate(UpdateView): 
    model = ZoneSubStage 
    fields = ['value'] 
    template_name = 'autostages/zonesubstage_update.html' 

zonesubstage_update.html

<form action="" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Update" /> 
</form> 
+0

你是什么之后是['FormSet'(https://docs.djangoproject.com/en/1.8/topics/forms/formsets/)。 – Ivan

回答

0

如果这是你的模型:

class ZoneSubStage(models.Model): 
    substage = models.ForeignKey(SubStage) 
    value = models.PositiveSmallIntegerField(default=0) 

超级覆盖form_valid方法来调用你如果要将它们全部设置为相同的值,请使用substage_set更新所有相关的substage对象。您可以使用Django的ORM update()方法:

class ZoneSubStageUpdate(UpdateView): 
    model = ZoneSubStage 
    fields = ['value'] 
    template_name = 'autostages/zonesubstage_update.html' 

    def form_valid(self, form): 
     self.object.substage_set.update(myfield='new-value') 
     return super(ZoneSubStageUpdate, self).form_valid(form) 
+0

我不想将它们全部设置为相同的值。我希望能够决定在一个表单中分别为每个值设置什么值。因此,想象一下显示这些值的页面,这样我就可以分别点击它们中的每一个,并通过键入并更新一次更新按钮来更改值。 – BlueTomato

+0

@BlueTomato然后你需要使用'Django FormSet'作为@ivan提到的。 –