Отфильтровать поле Foreignkey от выбора другого Foreignkey в django-admin? - PullRequest
1 голос
/ 10 июля 2010

у меня есть следующие модели

class Region(models.Model):
    nombre = models.CharField(max_length=25)

class Departamento(models.Model):
    nombre = models.CharField(max_length=25)
    region = models.ForeignKey(Region)

class Municipio(models.Model):
    nombre = models.CharField(max_length=35)
    departamento = models.ForeignKey(Departamento)

мне нужно отфильтровать опции в Departamento в соответствии с выбранным регионом и отфильтровать опции в Municipio в соответствии с выбранным Departamento.

это возможно ??

Спасибо, ребята!

1 Ответ

2 голосов
/ 12 июля 2010

Предполагается, что вы говорите об этом в серии полей выбора:

Создайте два представления, одно из которых возвращает ответ, содержащий Departamentos для данного региона.Другой делает то же самое, но для Municipios в Departamento

# views.py
from django.core import serializers

def departamentos_por_region(request, region_id):
    region = get_object_or_404(Region, id=region_id)
    departamentos = Departamento.objects.filter(region=region)
    return render_to_reponse("format_as_option_list.html",
                             {'departamentos': departamentos})

def municipios_por_departamento(request, departamento_id):
    # basically the same as above

Я предполагаю, что вы заполняете поле выбора региона в начальном представлении страницы, поэтому особого представления там не требуется.

Шаблон должен форматировать departamentos как список опций html.

Предполагая, что HTML в начальном представлении страницы выглядит примерно так:

<select id='regions'>
  <option value='1'>Region 1</option>
  <option value='2'>Region 2</option>
</select>
<select id='departamentos'>
</select>
<select id='municipios'>
</select>

Вы бы использовали некоторые JavaScript, например(в jQuery):

// this isn't tested code and likely contains an error or two
$('#regions').change(function(){

    // Region has changed, so reset Departamentos and Municipios
    $('#departamentos').html("")
    $('#municipios').html("")

    // now update the departamentos
    $.get('/ajax/departamentos_por_region/' +  $('#regions').val(),
          function(data) {
              ('#departamentos').html(data)    
          };     
    );
});

Сделайте то же самое для Municipios, что и для Departamentos.

Возможно, вы также захотите сделать такие вещи, как отключение полей, когда у них нет доступных вариантов, и обработатьслучаи, когда никакие департаменты или муниципалитеты не возвращаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...