2009-07-19 65 views
1

我試圖創建一個新的主題,並在客戶端JavaScript中動態確定類別ID。我遇到的問題是我傳遞類別ID,我想查找正確的類別對象,但使用模型表單,它會檢查該類別是否爲類別實例,然後才能分配並保存它。Django ModelForms:嘗試使用外鍵保存表單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() 

回答

2

使用ModelChoiceField代替IntegerField在你的表單中。查看built-in fields reference

+0

謝謝!我不明白django在幕後做了什麼,但這是有道理的。 – Komma 2009-07-19 23:35:03

0

按照Oggy的建議,我將其更改爲ModelChoiceField,現在Django在幕後完成所有魔術。

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

現在我希望queryset不會被評估,因爲它不是必要的,並且有90,000條記錄。 :)