Django:我可以使用表单限制哪些字段保存回数据库?

时间:2010-07-08 19:07:32

标签: django forms

我有一个表单,用于显示从记录到用户的多个字段。但是,用户不应该更新显示的所有字段。我该如何执行?如果我可以在调用form.save时指定要保存的字段,那会很好,但我无法使其工作。这是一些代码:

obj = get_object_or_404(Record, pk=record_id)
if request.method == 'POST':
    form = forms.RecordForm(request.POST, instance=obj)
    if form.is_valid():
        form.save()

我不认为使用表单的Meta定义中的排除或字段会起作用,因为这只会显示允许用户更新的字段。

2 个答案:

答案 0 :(得分:2)

您可以覆盖表单的save()方法:

class MyModelForm(forms.ModelForm):
    def save(self, commit=True):
        if self.instance.pk is None:
            fail_message = 'created'
        else:
            fail_message = 'changed'
        exclude = ['field_a', 'field_b'] #fields to exclude from saving
        return save_instance(self, self.instance, self._meta.fields,
                             fail_message, commit, construct=False,
                             exclude=exclude)

答案 1 :(得分:1)

选项1:排除这些字段,并使用您的模板显示不应在表单本身之外完全更改的数据。如果用户无法改变它们,我觉得它们并不是表单的一部分。

选项2:In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?

请将此字段标记为只读...但要了解此处没有服务器端安全性,因此您需要执行某些操作,例如在更新目标模型之前获取目标模型,并将这些有问题的表单字段更新为保存表单之前的现有数据。