0

現在、いくつかのフォームをレンダリングする 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 -->
 ...



どんな助けでも大歓迎です!

4

2 に答える 2

1

実装

いくつかの検索の後、私は解決策を思い付くことができました。実装に Dajax を追加して、ユーザーが選択したユーザーのタイプに基づいて必要なフィールドをページにリロードしました。これにより、入力する必要のないフィールドを削除し、入力したフィールドに対して検証を実行することができました。


参考文献

同様の問題を抱えている他の人を助けるために、 Dajax Project、特にPagination Exampleをチェックすることをお勧めします。チュートリアルに従っているだけでいくつかの問題に遭遇しましたが、Dajax Github Repoにアクセスすると問題を解決できるはずです。


注意すべき問題

  • JQuery UI を使用している場合は、Prototype バージョンではなく、JQuery バージョンの Dajax をロードするようにしてください。プロトタイプをロードすると、Dajax リンクをロードしたページで JQuery が機能しなくなります。参照については、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>
    

    これは、検索するとドキュメントにリストされますが、見落としがちです

    于 2012-07-07T00:39:14.473 に答える
    0

    プロファイルのタイプごとに異なるモデル フォームを作成します。テンプレートですべてのフォームを取得します。最後に、jquery を使用して、どちらを表示するかを決定します。

    于 2012-07-04T18:10:31.253 に答える