【问题标题】:Django ModelForms: Trying to save a form using a foreign key IDDjango ModelForms:尝试使用外键 ID 保存表单
【发布时间】:2009-07-19 20:47:30
【问题描述】:

我正在尝试创建一个新主题,并且类别 ID 在客户端的 javascript 中动态确定。我遇到的问题是我传递了类别 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()

【问题讨论】:

    标签: django-forms


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我还不了解 django 在幕后所做的一切,但这是有道理的。
    【解决方案2】:

    按照 Oggy 的建议,我将其更改为 ModelChoiceField,现在 Django 在幕后完成了所有魔法。

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 2013-10-11
      • 1970-01-01
      • 2014-09-07
      • 2012-09-20
      • 2017-08-07
      • 2020-10-07
      • 2016-06-07
      • 2011-02-24
      相关资源
      最近更新 更多