2012-02-07 3 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 

Ex:

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

как это много частей тела сохраняются. ... Теперь я хочу создать форму выполнения, имеет два поля выбора (BodySubPart и BodyPart), так что, когда я выбираю BodyPart, он должен изменить список в BodySubPart. Пример.

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 

Джанго делает большую работу, объясняя, как запросить эти отношения. https://docs.djangoproject.com/en/dev/topics/db/models/#many-to-many-relationships Кроме того, существует множество действительно отличных учебных пособий в Интернете о взаимоотношениях многих пользователей djangos.

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() 

Tie, что в какой-то URL в urls.py. Затем, некоторые 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.

Смежные вопросы