我有一个表单,用于显示从记录到用户的多个字段。但是,用户不应该更新显示的所有字段。我该如何执行?如果我可以在调用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定义中的排除或字段会起作用,因为这只会显示允许用户更新的字段。
答案 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?
请将此字段标记为只读...但要了解此处没有服务器端安全性,因此您需要执行某些操作,例如在更新目标模型之前获取目标模型,并将这些有问题的表单字段更新为保存表单之前的现有数据。