如何向request.POST添加信息?

时间:2012-03-12 06:04:36

标签: 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添加到模型实例时,我收到错误。我想添加它,所以在下一步(当它转到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_name的属性为blank = False,我创建了一个空白goal_name的新目标,它也会表示形式为is_valid()并保存表单。

2 个答案:

答案 0 :(得分:5)

    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'))

p.s 这是一个快速修复,但不是一个非常优雅的方法。虽然使用这个

没有问题

答案 1 :(得分:0)

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')