2009-07-19 3 views
1

새 주제를 만들려고합니다. 범주 ID는 클라이언트 측의 JavaScript에서 동적으로 결정됩니다. 내가 겪고있는 문제는 카테고리 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

고마워요! 나는 장고가 장면 뒤에서하는 모든 것을 이해하지 못한다. 그러나 그것은 의미가있다. – Komma

0

Oggy의 제안에 따라 필자는 ModelChoiceField로 변경했으며 이제 장고는 모든 마법을 수행합니다.

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

이제 불필요하고 90,000 개의 레코드가 있으므로 쿼리 세트가 평가되지 않기를 바랍니다. :)