Skip to main content
 首页 » 编程设计

python之Django之自动填充非空白表单字段

2024年08月30日36Free-Thinker

让我们考虑一下这个模型

class Session(models.Model): 
  tutor = models.ForeignKey(User) 
  start_time = models.DateTimeField() 
  end_time = models.DateTimeField() 

我正在尝试发布 start_time 和 end_time 的值,并自动为 tutor 提供当前登录的用户。

我的表单实际上只管理 start_time 和 end_time

class SessionForm(forms.ModelForm): 
  class Meta: 
    model = Session 
    exclude = ['tutor'] 

我的 View 添加了tutor:

def post(request): 
  """Session post""" 
  if request.method == 'POST': 
    form = SessionForm(request.POST) 
    form.tutor = request.user 
    if form.is_valid(): 
      form.save() 
      obj = {'posted': True} 
      return HttpResponse(json.dumps(obj), mimetype='application/json') 
    else: 
      return render_to_response('planner/editor.html', 
          form, context_instance=RequestContext(request),) 

我得到一个

Column 'tutor_id' cannot be null

我做错了什么?

请您参考如下方法:

.将导师设置为form.instance

代替:

form.tutor = request.user 
if form.is_valid(): 
  form.save() 

你应该:

form.instance.tutor = request.user 
if form.is_valid(): 
  form.save() 

但个人而言,我宁愿在 form.is_valid() 之后、form.save() 之前调整 form.instance。