Javascript 类似于Wufoo的web界面(可拖动元素、记忆状态)

Javascript 类似于Wufoo的web界面(可拖动元素、记忆状态),javascript,django,draggable,wufoo,Javascript,Django,Draggable,Wufoo,我的问题很具体。我想有一个应用程序,我可以创建表单,就像在Wufoo上一样,具有易于使用的界面。也就是说,可以拖动的元素 我的问题是,一旦使用更改了表单元素的顺序位置,我就无法确定如何将状态保存在数据库中。我可以做前端,并且有库可供使用,但是如何在后端保存表单的特定实例,以便下次使用登录时,顺序相同 我想用Django来做这个应用。因此,我能想到的基本类是: class Form(models.Model): """...objects...""" class TextField(mod

我的问题很具体。我想有一个应用程序,我可以创建表单,就像在Wufoo上一样,具有易于使用的界面。也就是说,可以拖动的元素

我的问题是,一旦使用更改了表单元素的顺序位置,我就无法确定如何将状态保存在数据库中。我可以做前端,并且有库可供使用,但是如何在后端保存表单的特定实例,以便下次使用登录时,顺序相同

我想用Django来做这个应用。因此,我能想到的基本类是:

class Form(models.Model):
  """...objects..."""


class TextField(models.Model):
  """...objects..."""
  #FK to Form()


class TitleArea(models.Model):
  """...objects..."""
  #FK to Form()
我还可以在HTML表单中的元素上具有特定ID:

<input id="Field2" name="Field2" type="text"/>

他们是怎么做到的?我的模型不对吗?我知道这很幼稚。谢谢。

您可以使用来使用模型实例创建表单。只需在用户完成编辑后保存模型,然后当您再次为他们创建表单时,将该模型用作
ModelForm
(或表单集)的实例即可:


win的隐藏输入字段

假设:

$("#submitForm").click(function() {
    // Check out the state of the union and change the hidden fields accordingly..
    // Something like:
    for (var i = 0; i < $(".orderedElements").length; i++) {
        $("#ordered-" + ((Number) i + 1)).attr('value', $(".orderedElements").eq(i).attr('id'));
    }
});
$(“#提交表单”)。单击(函数(){
//检查联盟的状态并相应地更改隐藏字段。。
//比如:
对于(变量i=0;i<$(“.orderedElements”).length;i++){
$(“#有序-”+((数字)i+1)).attr('value',$(.orderedElements”).eq(i).attr('id');
}
});

如果你明白我的意思。

那么,一个好的开始就是考虑一个用例。如果我是一个用户,我需要什么来构建表单?文本字段,当然,但还有什么?表格会有标题吗?URL?有效期


当您绘制出此类信息后,就可以开始在Django中构建模型了。

我明白了。那么,我必须在每个元素的类中都有一个字段?类似于:
ordinal_position=models.IntegerField(…)
。。每次用户向上或向下分级元素时,它可能会改变(通过AJAX…(?)我不知道django,所以zeekay解决方案可能更合适,但不管您的编程语言如何,您都可以使用我的解决方案。无论何时“提交”或“保存”,隐藏的输入字段都会发送到服务器,它们的顺序存储在数据库中,当您再次显示页面时,只需从数据库中提取元素顺序并相应地放置它们。确定。每当用户提交或保存表单时,您会查找每个部分并找到其订购位置,然后将该值推送到隐藏的表单提要中。e、 例如,第一个隐藏输入的值将是'element3',然后您可以将其保存到db:第一个隐藏输入(顺序第一)等于element3。如果你仔细考虑的话,你也可以只使用一个隐藏的输入。非常感谢。我觉得很好。
$("#submitForm").click(function() {
    // Check out the state of the union and change the hidden fields accordingly..
    // Something like:
    for (var i = 0; i < $(".orderedElements").length; i++) {
        $("#ordered-" + ((Number) i + 1)).attr('value', $(".orderedElements").eq(i).attr('id'));
    }
});