代码之家  ›  专栏  ›  技术社区  ›  Ignacio

如何在Django保存窗体上添加默认值?

  •  0
  • Ignacio  · 技术社区  · 14 年前

    我有一个对象任务和一个保存它的表单。我想自动将创建的域分配给当前登录的用户。所以,我的观点是:

    def new_task(request, task_id=None):
        message = None
        if task_id is not None:
            task  = Task.objects.get(pk=task_id)
            message = 'TaskOK'
            submit = 'Update'
    
        else:
            task = Task(created_by = GPUser(user=request.user))
            submit = 'Create'
    
        if request.method == 'POST': # If the form has been submitted...
            form = TaskForm(request.POST, instance=task)
            if form.is_valid():
                task = form.save(commit=False);
                task.created_by = GPUser(user=request.user)
                task.save()
                if message == None:
                    message = 'taskOK'
                return tasks(request, message)
        else:
            form  = TaskForm(instance=task)
        return custom_render('user/new_task.html',
                             {'form': form, 'submit': submit, 'task_id':task.id},
                             request)
    

    问题是,你猜,创建的“按”字段不会被保存。有什么想法吗?谢谢

    1 回复  |  直到 14 年前
        1
  •  2
  •   gruszczy    14 年前

    您正在创建 GPUser 但是你没有保存它。您必须先保存它,以便它得到pk,然后才能将它分配给 ForeignKey . 试试这个:

    task.created_by = GPUser.object.create(user=request.user)
    

    gpuser = GPUser(user=request.user)
    gpuser.save()
    task.created_by = gpuser