2009-07-19 9 views
1

Ich versuche, ein neues Thema zu erstellen und die Kategorie ID wird dynamisch in Javascript auf der Clientseite bestimmt. Das Problem, das ich habe, ist, dass ich die Kategorie-ID übergebe und das richtige Kategorieobjekt suchen möchte, aber anhand eines Modellformulars prüft es, ob die Kategorie eine Instanz der Kategorie ist, bevor ich sie zuordnen und speichern kann.Django ModelForms: Versuchen, ein Formular mit einem Fremdschlüssel 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() 

Antwort

2

Verwenden Sie einen ModelChoiceField statt IntegerField in Ihrer Form. Siehe die

+0

Danke! Ich verstehe noch nicht alles, was Django hinter den Kulissen macht, aber das macht Sinn. – Komma

0

Nach Oggy Vorschlag, ich änderte es in ein ModelChoiceField und jetzt macht Django die ganze Magie hinter den Kulissen.

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

Jetzt hoffe ich, die queryset nicht ausgewertet bekommt, da es nicht notwendig ist, und es gibt 90.000 Datensätze. :)

Verwandte Themen