将对象添加到下拉列表而不重新加载页面

时间:2014-05-30 12:24:35

标签: ajax django

嗨,我有一个引用'角色'模型的'成员'模型。我想要的是当用户创建“成员”时,他们可以从默认“角色”列表中选择(当服务器开始使用灯具时已加载到数据库中),或者他们可以单击添加角色然后键入单击“提交”,然后创建新创建的角色并将其分配给新创建的“成员”对象。

我希望能够在不提交的情况下创建角色,然后角色会显示在成员模型中角色字段的下拉菜单中。这是我需要了解AJAX实现此功能的地方吗?

模型

class MemberRole(models.Model,get_fields):
    name = models.CharField(max_length = 20)

    def __unicode__(self): 
        return self.name

class Member(models.Model,get_fields):
    first_name = models.CharField(max_length = 20)
    role = models.ForeignKey(MemberRole, null = True, blank = True)

查看

def add_member(request):

    model_url = 'member-add'

    if request.method == "POST":
        rform = MemberRoleForm(request.POST, instance=MemberRole())
        mform = MemberForm(request.POST, instance=Member())
        if rform.is_valid() and mform.is_valid():
            new_role = rform.save()
            new_member = mform.save(commit=False)
            new_member.role = new_role
            new_member.save()
            return HttpResponseRedirect('members')
    else:
        rform = MemberRoleForm(instance=MemberRole())
        mform = MemberForm(instance=Member())
    return render_to_response('create_model.html', {'role_form': rform, 'member_form': mform, 'model_url': model_url,},context_instance=RequestContext(request))

代码段create_model.html

<div id = "subtemplate">
<form action="{% url model_url %}" method="POST">
  {% csrf_token %}

  {% if model_url == 'member-add' %}

    {% for field in member_form %}
    {% if field.label == 'Role' %}
        <div id="roleExistsMemberForm">
            <button type="button" onclick="showDiv()">Add Role</button>
            {{ field.errors }}
            {{ field.label_tag }} {{ field }} {{ field.help_text }}
        </div>

    {% else %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
        </div>
    {% endif %}

    {% endfor %}
    <div Id="addRoleOnMemberForm">
    {% for field in role_form %}
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
    {% endfor %}
    </div>

  {% else %}

  <ul>
    <li>{{ form.as_ul }}</li>
  </ul>

  {% endif %}
    <div id="centerbuttons">
        <input id="save_contact" type="submit" value="Add"/>
    </div>
</form>

1 个答案:

答案 0 :(得分:0)

是的,Ajax将成为这样的第一个调用点。您可以在后台将表单提交到Django视图,然后视图可以使用新的选项列表进行响应,以重新填充下拉列表。