2015-04-05 13 views
5

Diciamo che ho il seguente modello:Come usare django-smart-select

class Location(models.Model) continent = models.CharField(max_length=20) country = models.ForeignKey(Country)

Ho bisogno di creare un menu a discesa dipendente in modo che quando seleziono un continente ricevo tutti i paesi appartenenti a quel continente . Come dovrei farlo?

risposta

5

Hai letto the documentation? È piuttosto semplice. Dipende da come hai impostato il tuo continente/paese. Suggerirei qualcosa come django-cities-light, che fornisce tabelle popolate con paesi/regioni. Non penso che abbia continenti però.

Se non si vuole fare questo, è necessario impostare un modello di paese che ha una colonna per continente ID per esempio:

Continent(models.Model): 
    name = models.CharField() 

Country(models.Model): 
    name = models.CharField() 
    continent = models.ForeignKey(Continent) 

Poi nel modello Località impostare i campi in tal modo:

from smart_selects.db_fields import ChainedForeignKey 

Location(models.Model): 
    newcontinent = models.ForeignKey(Continent) 
    newcountry = ChainedForeignKey(
     Country, # the model where you're populating your countries from 
     chained_field="newcontinent", # the field on your own model that this field links to 
     chained_model_field="continent", # the field on Country that corresponds to newcontinent 
     show_all=False, # only shows the countries that correspond to the selected continent in newcontinent 
    ) 

Dalla documentazione:

Questo esempio asumes che il Modello Paese ha un continente = ForeignKey campo (continente) .

Il campo concatenato è il campo sullo stesso modello anche il campo deve essere concatenato. Il campo modello concatenato è il campo del modello concatenato che corrisponde al modello collegato anche dal campo concatenato.

Spero che abbia senso.

3
  1. pip installare django-smart-seleziona
  2. Aggiungi smart_selects al tuo INSTALLED_APPS

  3. associare lo smart_selects URL nel urls.py. del progetto Questo è necessario per le selezioni concatenate e molti molti selezionati. Ad esempio,

  4. I suoi modelli Models

  5. Index.HTML Index