【问题标题】:Django add single fields to Model form using AJAX callDjango 使用 AJAX 调用将单个字段添加到模型表单
【发布时间】:2012-02-08 17:50:33
【问题描述】:

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

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

我怎样才能做到这一点?

【问题讨论】:

    标签: python ajax django django-models django-forms


    【解决方案1】:

    我最近做了类似的事情,我的解决方案是动态子类化表单,只提供需要的字段,然后只渲染那个字段:

    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.models 的User 模型,并且为特定用户创建了一个表单,则在空闲调用form["username"] 时会返回:

    <django.forms.forms.BoundField object at 0x01354750>
    

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

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

    【讨论】:

    • 我没听懂。你能详细说明一下吗?什么是表单[字段]?
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多