у меня есть следующие модели
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.
это возможно??
Спасибо люди!
Предположим, вы говорите о том, чтобы сделать это в серии полей выбора:
Создайте два представления, одно из которых возвращает ответ, содержащий 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
я предполагаю, что вы заполняете поле выбора региона в начальном просмотре страницы, так что никакого специального просмотра там не требуется.
Шаблон должен отформатировать подразделения как список опций 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.
Вы, вероятно, также захотите сделать такие вещи, как отключение полей, когда у них нет доступных вариантов, и обрабатывать случаи, когда не возвращаются подразделения или муниципалитеты.