我正在尝试创建一个新的主题,并且在客户端的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()
答案 0 :(得分:2)
在表单中使用ModelChoiceField而不是IntegerField。请参阅built-in fields reference
答案 1 :(得分:0)
根据Oggy的建议,我把它改成了ModelChoiceField,现在Django在幕后做了所有的魔术。
category = forms.ModelChoiceField(Category.objects.all(), widget=forms.HiddenInput())
现在我希望查询集不会被评估,因为它没有必要,并且有90,000条记录。 :)