Django - 即使在 POST 上没有更改任何字段,也保存 modelForm

标签 django django-forms

即使在 POST 上没有更改任何字段,我也想保存 modelForm,因为我使用 jQuery 函数修改表中表单集的顺序,我想手动保存表单集的位置。

当没有字段发生变化,但表单集行发生变化时,不会启动 save() 方法,并且不会保存位置。

形式:

class LayerMapOptions(models.Model):
    layer = models.ForeignKey(Shapefile)
    ezmap = models.ForeignKey(EzMap)
    position = models.IntegerField(max_length=100)
    visible = models.BooleanField()

查看:

def setMapOptions(request, map_name):
    map_selected = EzMap.objects.get(map_name=map_name, created_by=request.user)
    layers_ordered = LayerMapOptions.objects.filter(ezmap=map_selected).order_by('position')
    layerForm = modelformset_factory(LayerMapOptions, form=LayerMapOptionsForm, extra=0, can_delete=True)
        if request.POST:
            formset = layerForm(request.POST, queryset=layers_ordered)
            pk_list = request.POST.get("layersOrder")

            if formset.is_valid():
                instances = formset.save(commit=False)
                    for instance in instances2:
                        instance.position = pk_list.index(instance.layer.pk)
                        instance.save()

            save_link = u"/ezmapping/map/%s" % (map_name)
            return HttpResponseRedirect(save_link)
        else:
            formset = layerForm(queryset=layers_ordered)
     return render_to_response("ezmapping/manage_map_Options.html", {'formset': formset}, context_instance=RequestContext(request))

形式:

class LayerMapOptionsForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(LayerMapOptionsForm, self).__init__(*args, **kwargs)
        self.fields['position'].widget = forms.HiddenInput()

    class Meta:
        model = LayerMapOptions
        fields =  ['layer', 'visible', 'position']

可以看到,当调用 instances = formset.save(commit=False) 时,只有修改过的格式才会放入 instances。我想将所有表单集放入实例中,并单独更新所有表单集。

最佳答案

还有另一种方法,如何做到这一点:

class LayerMapOptionsForm(forms.ModelForm):
    def has_changed(self, *args, **kwargs):
        return True

关于Django - 即使在 POST 上没有更改任何字段,也保存 modelForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18256239/

相关文章:

python - Django 2.1+ 批量更新记录及其相关记录的数量?

python - GET 表单方法上的 CSRF 验证错误

django - 如何设置Django中最高值的排序字段+1的默认值

Django - 更改 'upload file' 按钮在模板中显示的内容

python - (Django) 将 'context' (基本信息)传递到每个页面,甚至表单?

python - 可以在基于 Django 类的 View 中设置实例变量吗?

python - 属性错误;按类别问题列出的图表列表的动态 url(查询集过滤器)

python - 是否有理由劝阻我在我的 Django 应用程序中使用替代模板引擎?

django - 如何获取 Django 模型中具有 ForeignKey 字段特定值的所有对象?

django - 如何像在 Django Admin 中一样在表单中创建外键链接字段?