2009-07-19 5 views
1

J'essaie de créer un nouveau sujet et l'identifiant de la catégorie est déterminé dynamiquement en javascript du côté client. Le problème que j'ai est que je passe l'identifiant de la catégorie et que je veux rechercher l'objet catégorie correct, mais en utilisant un formulaire modèle, il vérifie si la catégorie est une instance de Catégorie avant de pouvoir l'assigner et l'enregistrer.Django ModelForms: Essayer d'enregistrer un formulaire en utilisant une clé étrangère ID

--model.py--

class Topic(models.Model): 
    category = models.ForeignKey(Category) 

--form.py--

class TopicForm(ModelForm): 
    category = forms.IntegerField(widget=forms.HiddenInput()) 

    class Meta: 
     model = Topic 
     fields = ('category') 

--view.py--

form = TopicForm(request.POST) 

if form.is_valid(): 
    form.save(commit=False) # throws exception category is not a Category instance 
    form.category = Category.objects.get(pk=form.cleaned_data.get('category')) 
    form.save() 

Répondre

2

Utilisez un ModelChoiceField au lieu de l'IntegerField dans votre formulaire. Voir la built-in fields reference

+0

Merci! Je ne comprends pas tout ce que django fait encore dans les coulisses, mais c'est logique. – Komma

0

En suivant la suggestion d'Oggy, je l'ai changé en ModelChoiceField et maintenant Django fait toute la magie derrière les scènes.

category = forms.ModelChoiceField(Category.objects.all(), widget=forms.HiddenInput()) 

Maintenant j'espère que le queryset ne soit pas évalué, car il est pas nécessaire et il y a 90.000 dossiers. :)

Questions connexes