向模型中但不在表单中的数据库字段添加值

时间:2019-12-15 12:01:26

标签: django

我有一个模型,其属性名为authID,如下所示: authID = models.CharField(max_length=400) 在我看来,表单中的所有字段都按如下方式放入数据库:

if request.method == 'POST':
  form = PersonalDetailsModelForm(request.POST)
  if form.is_valid():
     form.save()

我想知道怎么做,就是当他们提交表单时,我还想将authID的值放入我的数据库中。但是,authID不是我表单中的字段。出于安全考虑,我也不想将其设置为隐藏字段。 您如何为模型中的 而不是 的数据库字段添加值?

2 个答案:

答案 0 :(得分:1)

在保存实例之前,您可以覆盖PersonalDetailsModelForm上的save() method来设置此值:

def save(self, commit=True):
    self.instance.authID = 'some_value'   # Set the auth ID
    return super().save(commit=commit)

如果authID来自您的视图,则可以将其作为关键字参数传递给覆盖的save()方法。

答案 1 :(得分:1)

使用 save()

调用Django Form的 commit=False 方法
#views.py
if request.method == 'POST':
    form = PersonalDetailsModelForm(request.POST)
    if form.is_valid():
        model_instance = form.save(commit=False) # 'commit=False' plays key role here
        model_instance.authID = 'your auth id'
        model_instance.save()
        ...

参考

  1. Django model form save() method