Как добавить информацию в request.POST? - PullRequest
4 голосов
/ 12 марта 2012

Когда пользователь создает что-то с помощью формы, вся информация передается через форму, которая отправляется через вызов 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 и добавьте идентификатор пользователя в экземпляр модели.Я хочу добавить его, поэтому на следующем шаге (когда он перейдет к 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)

Другая проблема заключается в том, что, хотя имя_ цели имеет атрибутblank = False, и я создаю новую цель с пустым name_name, она говорит, что форма is_valid (), и сохраняет форму.

Ответы [ 2 ]

5 голосов
/ 12 марта 2012
    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 Это быстрое решение, но не очень элегантный метод для использования. Хотя нет никаких проблем, когда вы использовали бы это

0 голосов
/ 12 марта 2012

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...