Python 如何将信息添加到request.POST?
当用户使用表单创建内容时,所有信息都通过表单提交,表单通过AJAX调用发送到以下视图: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添加到模型实例时出
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'))