如何只更新Django模型表单中的某些字段?
我有一个表单,用来更新一个模型。
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')