2011-08-02 3 views
2

Tenez compte de ces 3 modèles:Django modèle Choix champ: Liste énorme de choix

# models.py 
class City(models.Model): 
    name = models.CharField(max_length=50) 

class Institute(models.Model): 
    name = models.CharField(max_length=100) 
    city = models.ForeignKey(City) 

class Student(models.Model): 
    name = models.CharField(max_length=60) 
    roll = models.CharField(max_length=10) 
    institute = models.ForeignKey(Institute) 

Maintenant, je crée un modèle de formulaire pour ajouter/étudiants modifier mais je fournir la possibilité de choisir la ville et l'Institut pour l'utilisateur. Donc, fondamentalement, lorsqu'un utilisateur sélectionne la ville les instituts correspondants sont affichés en utilisant JavaScript

# forms.py 
class StudentForm(forms.ModelForm): 
    city = forms.ModelChoiceField(City) 
    institute = forms.ModelChoiceField(queryset=Institute.objects.all()) 

class Meta: 
    model = Student 

Mais le nombre d'instituts est sur 3000. Donc ce que je veux est de garder les choix que les blancs d'abord pour le champ institut (coz ils seront rempli par le JavaScript une fois que l'utilisateur a sélectionné une ville), mais lors de la soumission des données, j'obtiens une erreur de validation "Sélectionner un choix valide". Des idées pour s'attaquer à ce problème?

Note: Quand je ne précise pas les choix (pour le champ institut) la taille de la page Web est 300KB et quand je les spécifier la taille de la page Web est

1.1MB
+0

Pourriez-vous montrer le code JavaScript ainsi? – LaundroMat

Répondre

1

Apparemment, j'ai dû remplacer le widget Choice et modifier sa méthode de rendu pour n'afficher aucune option. Puisque l'argument des choix est toujours fourni, l'erreur de validation ne se produit pas et je peux librement utiliser javascript pour rendre les instituts par la ville sélectionnée.

0

Vous devez vous assurer que les Institute valeurs qui se remplissent dans la zone de sélection doit également avoir la clé primaire en tant qu'attribut html id.

0

J'ai eu le même problème, mais overcomed en définissant widget.choices à []

class StudentForm(forms.ModelForm): 
    city = forms.ModelChoiceField(City) 
    institute = forms.ModelChoiceField(queryset=Institute.objects.all()) 

def __init__(self, *args, **kwargs): 
    super(StudentForm, self).__init__(*args, **kwargs) 
    self.fields['institute'].widget.choices = [] 
Questions connexes