Django Templates / ChoiceField显示基于Selection的字段

时间:2012-07-04 17:22:14

标签: jquery django django-forms django-templates choicefield

我目前正在Django中创建一个呈现某些表单的模板。我有多个配置文件模型,根据用户的用户类型保存特定数据。例如,我有一个公司资料,其中包含公司名称和拥有个人电话号码的客户资料。我有一个ChoiceField,用于确定哪种类型的用户填写表单,并根据用户选择的内容显示一组特定字段。当用户做出选择时,我正在使用JQuery来使特定的隐藏字段可见。

我遇到的问题是其他模型需要一些未显示的字段。因此,公司简介需要公司名称,客户资料需要个人电话号码。如果用户选择“公司”作为其类型,则我的模板将返回个人电话号码字段的错误,并且不会提交。有没有办法使用Django,JQuery或其他东西根据用户选择禁用或删除或忽略不必要的字段?



以下是我目前隐藏信息的方式:

<script type="text/javascript">
$(document).ready(function() {
$("#id_user_type").change(function(){
    $(".user-type-wrapper").slideUp('500');
    $("#user-type-"+$(this).val()).slideDown('500');
});});
</script>



此脚本正在影响我模板的这一部分:

 ...
 <div class="field">
     {{ form.user_type.errors }}
     <label for="id_user_type">User Type:</label>
     {{ form.user_type }}
 </div>

 <!-- Company Specific Form Content -->
 <div class="user-type-wrapper" id="user-type-CO" style="display: none;">
      <div class="field">
          {{ form.company_name.errors }}
          <label for="id_company_name">Company Name:</label>
          {{ form.company_name }}
      </div>
 </div>
 <!-- End Company Specific Form Content -->

 <!-- Customer Specific Form Content -->
 <div class="user-type-wrapper" id="user-type-CU">
      <div class="field">
          {{ form.phone_number.errors }}
          <label for="id_phone_number">Phone Number:</label>
          {{ form.phone_number }}
      </div>
 </div>
 <!-- End Customer Specific Form Content -->
 ...



任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

实施

经过一番搜索后,我得出了一个解决方案。我将Dajax添加到我的实现中,根据用户选择的用户类型重新加载包含必填字段的页面。这使我能够消除那些不需要完成的字段,并且仍然可以对那些字段进行验证。


进一步阅读

为了帮助遇到类似问题的其他人,我建议您查看Dajax Project,尤其是Pagination Example。我只是按照教程遇到了一些问题,但是如果你访问Dajax Github Repo,你应该能够完成它。


要注意的问题

  • 如果您使用的是JQuery UI,请确保加载JQuery版本的Dajax而不是Prototype版本。加载Prototype将导致JQuery在您加载Dajax链接的页面上无法正常运行。有关参考,请参阅位于https://github.com/jorgebastida/django-dajax/issues/37的导入代码。
  • 如果您使用的是JQuery,请确保在标题中包含以下内容:
  • <script src="https://github.com/cowboy/jquery-misc/blob/master/jquery.ba-serializeobject.js" type="text/javascript" charset="utf-8"></script>
    

    如果您搜索它但很容易忽略,则会在文档中列出

    答案 1 :(得分:0)

    为每种类型的配置文件制作不同的模型。 在模板中获取所有表单。 最后,使用jquery来决定应该看哪一个。