2012-03-12 34 views
2

當用戶使用表單創建的東西,所有的信息,通過它通過AJAX調用發送到以下視圖中的表單提交。 POST字典並將用戶的ID添加到模型實例。我想添加它,所以在下一步(當它進入form_validate時),它會爲我創建一個新的模型實例。 這裏是form_validate,它根據ModelForm驗證表單。如何將信息添加到request.POST?</p> <pre><code>def goal_create(request): if request.method == 'POST': user = request.user request.POST[user] = user.id errors = form_validate(request, AddGoalForm, Goal) </code></pre> <p>當我嘗試修改請求我得到一個錯誤:

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的屬性是空白=假,並創建一個空白GOAL_NAME一個新的目標,它說表單is_valid()並保存表單。

+0

,你需要把它列入形式? – monkut 2012-03-12 06:08:06

+0

我必須在未來訪問目標用戶。使用上述方法,用戶爲空。 – egidra 2012-03-12 06:16:01

回答

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') 
3
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這是一個快速解決,但不要用一個非常優雅的方法。雖然沒有問題時,你會如果你不使用表單的用戶現場使用

相關問題