Python 如何将信息添加到request.POST?

Python 如何将信息添加到request.POST?,python,django,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) 尝试修改request.POST dict并将用户id添加到模型实例时出

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

def goal_create(request):
  if request.method == 'POST':
    user = request.user
    request.POST[user] = user.id
    errors = form_validate(request, AddGoalForm, Goal)
尝试修改request.POST dict并将用户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()
以下是我正在使用的模型:

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)
另一个问题是,即使goal\u name的属性为blank=False,并且我用一个空的goal\u name创建了一个新目标,但它表示表单是有效的(),并保存表单。

forms.py

class GoalForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(GoalForm, self).__init__(*args, **kwargs)

    def save(self, commit=True):
        obj = super(GoalForm, self).save(commit=False)
        obj.user = self.user
        if commit:
            obj.save()
        return obj
views.py

@login_required
def add_goal(request):
    form = GoalForm(user=request.user, data=request.POST)
    if form.is_valid():
        obj = form.save()
        return HttpResponse('ok')
    return HttpResponse('errors')

p.s这是一种快速修复方法,但不是一种非常优雅的使用方法。如果不使用表单的用户字段,则使用此字段时不会出现问题,但是否需要将其包含在表单中?我将来必须访问目标的用户。使用上述方法,用户为null。
    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'))