2010-07-27 1 views
1

J'ai une référence de clé étrangère qui apparaît sous la forme d'une zone de sélection sur le client, mais elle est pré-remplie avec des valeurs. Je veux que la boîte de sélection soit vide quand elle s'affiche car elle sera remplie par un appel Ajax.Supprimer tous les éléments d'un champ de sélection de clé étrangère

Ceci est mon modèle

class RecipeIngredient(models.Model): 
    recipe = models.ForeignKey(Recipe) 
    ingredient = models.ForeignKey(Ingredient) 
    serving_size = models.ForeignKey(ServingSize) 
    quantity = models.IntegerField() 
    order = models.IntegerField() 
    created = models.DateTimeField(auto_now_add = True) 
    updated = models.DateTimeField(auto_now = True) 

et ceci est mon modèle de formulaire

class RecipeIngredientForm(forms.ModelForm): 
    class Meta: 
     model = RecipeIngredient 
     fields = ('ingredient', 'quantity', 'serving_size') 
     widgets = { 
      'ingredient': forms.TextInput(attrs={'class' : 'recipe_ingredient'}), 
      'quantity': forms.TextInput(), 
      'serving_size' : forms.ChoiceField(choices=PLEASE_SELECT, widget=forms.Select()), 
     } 

Je veux que le champ « serving_size » pour que les choix que je spécifié et aucune donnée de la base de données. Évidemment, j'obtiens une erreur

AttributeError: 'ModelChoiceField' object has no attribute 'to_field_name' 

Des idées?

Répondre

3

N'incluez pas serving_size dans fields. Au lieu de l'ajouter vous-même:

class RecipeIngredientForm(forms.ModelForm): 
    serving_size = forms.ChoiceField(..) 

Essayez ceci et dites-le, si cela fait l'affaire.

En outre, je crois que vous ne devriez pas mettre ChoiceField dans widgets, ce n'est pas un widget, mais un champ entier.

EDIT

class RecipeIngredientForm(forms.ModelForm): 
    serving_size = forms.ChoiceField(choices=PLEASE_SELECT, widget=forms.Select()) 

    class Meta: 
     serving_size = forms.ChoiceField(choices=PLEASE_SELECT, widget=forms.Select()) 
     model = RecipeIngredient 
     fields = ('ingredient', 'quantity', 'serving_size') 
     widgets = { 
      'ingredient': forms.TextInput(attrs={'class' : 'recipe_ingredient'}), 
      'quantity': forms.TextInput(), 
     } 
+0

Merci pour la réponse. Si je ne l'inclue pas dans les champs, il n'apparaît pas sur la page. J'ai essayé ce fields = ('ingrédient', 'quantité') serving_size = forms.ChoiceField() – iJK

+0

J'ai ajouté un formulaire complet. Vous avez essayé exactement cela? Je suis sûr que cela devrait fonctionner. – gruszczy

+0

Merci, cela a fonctionné. Si cela ne vous dérange pas pouvez-vous expliquer ce que nous avons fait? Avons-nous simplement créé un nouveau champ? – iJK

Questions connexes