2010-07-10 6 views
1

i ont les modèles suivantsFiltrez le champ foreignkey à partir de la sélection d'un autre foreignkey dans django-admin?

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) 

i doivent filtrer les options Departamento selon la région sélectionnée et filtrer les options Municipio selon Departamento sélectionné.

est-ce possible?

Merci à tous!

Répondre

2

En supposant que vous parlez de faire cela dans une série de boîtes de sélection:

Créer deux vues, celui qui renvoie une réponse contenant la Departamentos pour une région donnée. L'autre fait la même chose mais pour Municipios dans un 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 

Je suppose que vous remplissez la zone de sélection de la région dans la vue de la page initiale, donc pas de vue particulière nécessaire là.

Le modèle doit formater les departamentos en tant que liste d'options html.

En supposant alors que le code HTML dans la vue de la page initiale ressemble à quelque chose comme:

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

Vous souhaitez utiliser javascript comme (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)  
      };  
    ); 
}); 

Faites la même chose pour Municipios que pour Departamentos.

Vous voudrez probablement aussi faire des choses comme désactiver les champs quand ils n'ont pas de choix disponibles, et gérer les cas où aucun departamentos ou municipios ne sont retournés.

Questions connexes