Django使用AJAX向模型表单添加单个字段

2024-09-26 18:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型表格。表单包含一个按钮“添加更多字段”。单击此按钮将发送一个AJAX调用,该调用应向表单添加一个textfield。可以添加任意数量的“文本字段”。在

我不确定Django Formsets是否是正确的方法,因为我需要将“额外添加的字段”的数据存储在数据库中同一个模型表单的表中。在

我怎样才能做到这一点?在


Tags: 数据django方法模型文本数据库表单数量
1条回答
网友
1楼 · 发布于 2024-09-26 18:16:37

我最近做了类似的事情,我的解决方案是动态地将表单子类化,只提供所需的字段,并仅呈现该字段:

from forms import SomeModelForm
from models import SomeModel
def view_name(request,pk,field):
    SomeModelFieldForm(SomeModelForm):
        class Meta(SomeModelForm.Meta):
            fields = (field,)

    inst = SomeModel.objects.get(pk=pk)
    form = SomeModelFieldForm(instance=inst)

    #the rest of your view goes here...

    #...send only the form's field:
    ctx = {'field': form[field]}
    return render_to_response("template",ctx)

这将利用原始表单的特殊性—例如,如果您有专门定义的小部件或其他限制,或者其他什么。然后它将整个表单限制为一个字段。这是为了允许对现有模型上的单个字段进行验证。在

但是,您不想发送整个表单,只需要发送单个字段。form[field]是一个django.forms.forms.BoundField,它表示您传入的特定字段。在

例如,如果您使用来自django.contrib.auth.modelsUser模型,并且为特定用户创建了一个窗体,则在空闲调用form["username"]时将返回:

^{pr2}$

调用print form["username"]将打印:

<input id="id_username" type="text" name="username" value="name_of_user" maxlength="30" />

相关问题 更多 >

    热门问题