如何在POST为嵌套数组的情况下更新Django模型实例?

12 投票
1 回答
25356 浏览
提问于 2025-04-16 05:34

我有一个表单,它提交了以下数据:

question[priority] = "3"
question[effort] = "5"
question[question] = "A question"

这些数据会被发送到这个网址 /questions/1/save,其中 1question.id。我想做的是获取问题编号为1的内容,并根据提交的数据进行更新。我已经实现了一部分功能,但我不知道怎么把提交的数据放进这个实例里。

question = get_object_or_404(Question, pk=id)
question <<< request.POST['question'] # This obviously doesn't work, but is what I'm trying to achieve.
question.save()

所以,有没有办法把查询字典(QueryDict)放入模型实例中,并用我的表单数据更新每个字段呢?

当然,我可以遍历提交的数据,逐个设置每个值,但这样做似乎对这样一个优雅的语言来说有点复杂。

1 个回答

43

你可以使用一个叫做 ModelForm 的东西来实现这个功能。首先,你需要定义这个 ModelForm:

from django import forms

class QuestionForm(forms.ModelForm):
    class Meta:
        model = Question

然后,在你的视图中:

question = Question.objects.get(pk=id)
if request.method == 'POST':
    form = QuestionForm(request.POST, instance=question)
    form.save()

撰写回答