如何添加信息到request.POST?

egi*_*dra 4 python django

当用户使用表单创建内容时,所有信息都通过表单提交,该表单通过AJAX调用发送到以下视图:

def goal_create(request):
  if request.method == 'POST':
    user = request.user
    request.POST[user] = user.id
    errors = form_validate(request, AddGoalForm, Goal)
Run Code Online (Sandbox Code Playgroud)

尝试修改request.POST字典并将用户的ID添加到模型实例时,出现错误。我想添加它,所以在下一步(当它进入form_validate时),它将为我创建一个新的模型实例。这是form_validate,它根据ModelForm验证表单。

def form_validate(request, form, model):
  form = form(request.POST)
  if form.is_valid():
    new = form.save()
  else:
    return form.errors.items()
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的模型:

class Goal(models.Model):
  goal_name = models.CharField(max_length=200, blank=False)
  user =  models.ForeignKey(User, null=True, blank=True)
  created_at = models.DateField(auto_now_add=True)
  updated_at = models.DateField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

另一个问题是,即使goal_name的属性为blank = False,并且我用空白的goal_name创建了一个新目标,但它说的是表单is_valid()并保存了表单。

Zai*_*han 6

    if request.method == 'POST':

        user = request.user
        post_values = request.POST.copy()

        post_values['user'] = user.id
        form = MyForm(post_values)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('success'))
        return HttpResponseRedirect(reverse('error'))
Run Code Online (Sandbox Code Playgroud)

ps:这是一种快速修复方法,但不是一种非常优雅的方法。虽然何时使用此功能没有问题