如何只更新Django模型表单中的某些字段?

11 投票
2 回答
8189 浏览
提问于 2025-04-16 00:00

我有一个表单,用来更新一个模型。

class Turtle(models.Model):
    name = models.CharField(max_length=50, blank=False)
    description = models.TextField(blank=True)

class TurtleForm(forms.ModelForm):
    class Meta:
        model = Turtle

有时候我并不想更新整个模型,只想更新其中一个字段。所以当我提交表单时,里面只有描述的信息。当我这样做的时候,模型并不会保存,因为它认为名字被清空了,而我的本意是名字不变,依然使用模型里的名字。

    turtle_form = TurtleForm(request.POST, instance=object)
    if turtle_form.is_valid():
        turtle_form.save()

有没有什么办法可以实现这个呢?谢谢!

2 个回答

2

如果你不想更新某个字段,可以通过在Meta里面使用exclude这个元组把它从表单中去掉:

class Meta:
    exclude = ('title',)
9

只使用指定的字段:

class FirstModelForm(forms.ModelForm):
    class Meta:
        model = TheModel
        fields = ('title',)
    def clean_title(self....

可以查看这个链接了解更多信息:http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#controlling-which-fields-are-used-with-fields-and-exclude

在不同的视图中,通常会为同一个模型使用不同的ModelForms,因为你可能需要不同的功能。所以如果你想为这个模型创建另一个表单,并且希望它有相同的行为(比如使用clean_<字段名>的方法等),可以使用:

class SecondModelForm(FirstModelForm):
    class Meta:
        model = TheModel
        fields = ('title', 'description')

撰写回答