2016-10-07 8 views
1

時に私は、これらのモデルを作成しました:ジャンゴ:フィルタによる動的インラインフォームユーザ選択

class Service(models.Model): 
    name = models.CharField(blank=False, max_length=200)code here 

class Monitor(models.Model): 
    name = models.CharField(blank=False, max_length=100) 
    services = models.ManyToManyField(Service, related_name='monitors') 

class Student(models.Model): 
    name = models.CharField(blank=False, max_length=100) 

class ServiceMonitors(models.Model): 
    student = models.ForeignKey(Student, on_delete=models.CASCADE) 
    service = models.ForeignKey(Service, on_delete=models.CASCADE) 
    monitors = models.ManyToManyField(Monitor) 

これらのモデルは、学生に多くのサービスを提供する会社を表しています。この会社で働くモニターは、提供するサービスが必要な学生に割り当てられます。モニターは多くのサービスを提供することができ、それらのすべてのために多くの学生を持っています。また、学生は多くのサービスとモニターを持つことができます。

3つのサービスs1、s2、s3があるとしましょう。新しいMonitorを作成するときに、これらのサービスのいくつかを割り当てます。s1とs3としましょう。その後、新しい生徒を作成するときに、生徒が持つサービスとモニターを選択できるようになります。ドロップダウンコントロール一度

  • からサービスを選択

    1. :ここ

      私の問題は、私は私を可能に学生(名前、電話番号、など...)を作成するためのフォームを必要とするということですサービスが選択されている場合は、そのサービスを提供するモニターをフォームに表示する必要があります。そのため、1つ以上のチェックボックスを選択できます。

    2. プロセスを繰り返すために新しいフォームを作成/表示するためのボタンです。したがって、 は新しいサービスと関連するモニターを選択できます。

    私はDjangoの新機能です。私は、ユーザー作成フォームでインラインフォームを作成することができましたが、私はここで立ち往生しています。私は今サービスを選択するためのドロップダウンコントロールと、すべてのモニターを表示するCheckboxSelectMultipleウィジェットでModelMultipleChoiceFieldを持っています。ここから、ユーザーがサービスを選択したときにこれらのモニターをフィルターする方法と、新しいサービス/モニターを選択するために新しいフォームを追加する方法を知る必要があります。

  • 答えて

    0

    これは、Djangoフォームフレームワーク内では非常に機能が制限されているとは考えられません。これは、ModelChoiceDropDown(私はそれが名前だと思う)の選択のためのフィルタリングされたクエリセットを使用することができますが、選択後のフィルタリングはこのようにはできません。 Djangoのフォームは生成され、HTMLとして送信されます。これは、多くの変更を加えることなくフィルタリングすることができません。

    これは、RESTインターフェイス(Django Rest FrameworkまたはDjango-Tastypieを参照)を設定し、選択したフロントエンドフレームワークを使用してドロップダウンリストをリンクする方法です(私はBackbone.jsを好むが、多くのオプションがあります)。サービスを選択すると、それ以降のドロップダウンでは、そのサービスを提供するモニターのみを表示するように要求にフィルターが追加されます。

    Djangoフォームを引き続き使用したい場合は、このような機能を得るためにデフォルトのフィールドを拡張する必要があります。

    これはかなり大きいウサギの穴です。私はあなたに向かって指先をするための袖口からのリソースがありません。しかし、RESTインターフェースについて読むことは良いスタートです。

    +0

    ありがとう、私はカスタムフォームとJSでこれを試してみると思います。ユーザーがサービスを選択すると、すべてのサービスをチェックボックスとして表示し、関連するモニターを表示しようとします。このようにして、すべての情報をクライアント側にフィルタリングすることができます。 – ESS

    関連する問題