Django ModelForms:尝试使用外键ID保存表单

时间:2009-07-19 20:47:31

标签: django-forms

我正在尝试创建一个新的主题,并且在客户端的javascript中动态确定类别ID。我遇到的问题是我传递了类别ID,我想查找正确的类别对象,但是使用模型表单,它会在我分配并保存之前检查类别是否为Category的实例。

- 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 个答案:

答案 0 :(得分:2)

在表单中使用ModelChoiceField而不是IntegerField。请参阅built-in fields reference

答案 1 :(得分:0)

根据Oggy的建议,我把它改成了ModelChoiceField,现在Django在幕后做了所有的魔术。

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

现在我希望查询集不会被评估,因为它没有必要,并且有90,000条记录。 :)