2012-02-07 15 views
0

を照会:多くの分野に多くのDjango-私はジャンゴでモデルの構造を以下している

class BodySubPart(models.Model): 
    body_subpart=models.CharField(max_length=20) 
    def __str__(self): 
     return self.body_subpart 

class BodyPart(models.Model): 
    body_part=models.CharField(max_length=20) 
    body_subpart=models.ManyToManyField(BodySubPart) 
    def __str__(self): 
     return self.body_part 

例:

example, 
if BodyPart=head then BodySubPart= face,mouth,eyes,nose. 
if BodyPart=arm then BodySubPart= shoulder,fingers,elbow. 

をこの多くのボディパーツが格納されているように。 ... 今、私はBodySubPartのリストを変更する必要があるように、BodyPartを選択すると2つのchoicefields(BodySubPartとBodyPart)を持つランタイムフォームを作成したいと思います。 Ex。

The first choicefield has body parts={head,arm,chest...} 
The second choice field should change when i select a particular part 
If i select "head" then second choice field should show, 
body sub parts={face,mouth,eyes,nose...} 

ここで私を助けてください.....あなたは試してみました何

答えて

1

?あなたが実際に何かを試してみて、他の人たちがあなたのためにやりたがっているのではないなら、人々があなたを助けてくれることをもっと喜んでいるでしょう。これは次のようなものです:

1) BodyPart.objects.all() # all body parts 
2) head = BodyPart.objects.get(body_part='head') 
     head_subparts = head.body_subpart.all() # all head subparts 

djangoは、これらの関係を照会する方法を説明する素晴らしい仕事をしています。 https://docs.djangoproject.com/en/dev/topics/db/models/#many-to-many-relationships さらに、djangosのmanytomany関係については、実際にオンライン上に多くのチュートリアルがあります。

1

これはAJAXのビットを必要とするので、最初のステップはそれを処理するためのビューを作成することです:

from django.core import serializers 
from django.http import HttpResponse, HttpResponseBadRequest 
from django.shortcuts import get_list_or_404 

def ajax_get_bodysubparts(request): 
    bodypart_id = request.GET.get('bodypart_id') 

    if bodypart_id: 
     bodysubparts = get_list_or_404(BodySubPart, bodypart__id=bodypart_id) 
     data = serializers.serialize('json', bodysubparts) 
     return HttpResponse(data, mimetype='application/json') 
    else: 
     return HttpResponseBadRequest() 

タイというurls.py.でいくつかのURLに次に、フォームのためのいくつかのJavaScript(jQueryのを想定):

$(document).ready(function(){ 
    $('#id_bodypart').change(function(){ 
     var selected = $(this).val(); 
     if (selected) { 
      $.getJSON('/url/to/ajax/view/', { 
       'bodypart_id': selected 
      }, function (data, jqXHR) { 
       options = []; 
       for (var i=0; i<data.length; i++) { 
        options.append('<option value="'+data[i].id+'">'+data[i].body_subpart+'</option>'); 
       } 
       $('#id_bodysubpart).html(options.join('')); 
      }); 
     } 
    }); 
}); 
0

は、あなたはおそらく、あなたが望む結果を得るために、カスタムフォームフィールドとウィジェットの組み合わせが必要になります。

django-ajax-filtered-fieldsプロジェクトをチェックして、探しているものが近いかどうかを確認してください。あなた自身で作成することを決めた場合は、少なくともいくらかのガイダンスを提供します。

フィールドを動的に設定するための新しいリクエストを作成するにはjavascriptが必要です。標準のdjangoフォームでは使用できません。

関連する問題