2010-05-16 119 views
5

我試圖在「微博」最小應用程序中保存100個字符的用戶表單。 我的代碼似乎沒有任何mystakes,但不起作用。 錯誤是在views.py中,我無法將外鍵保存到用戶表中。無法將表單內容保存到數據庫

models.py看起來是這樣的:

class NewManager(models.Manager): 

    def create_post(self, post, username): 
new = self.model(post=post, created_by=username) 
     new.save() 
     return new 

class New(models.Model): 

    post = models.CharField(max_length=120) 
    date = models.DateTimeField(auto_now_add=True) 
    created_by = models.ForeignKey(User, blank=True) 
    objects = NewManager() 


class NewForm(ModelForm): 

    class Meta: 
      model = New 
      fields = ['post'] 
     # widgets = {'post': Textarea(attrs={'cols': 80, 'rows': 20}) 

def save_new(request): 

    if request.method == 'POST': 
     created_by = User.objects.get(created_by = user) 
     date = request.POST.get('date', '') 
     post = request.POST.get('post', '') 
     new_obj = New(post=post, date=date, created_by=created_by) 
     new_obj.save() 
     return HttpResponseRedirect('/') 
    else: 
      form = NewForm()  
    return render_to_response('news/new_form.html', {'form': form},context_instance=RequestContext(request)) 

我沒有在這裏提到的進口 - 他們做對了,反正。 我的錯誤是在views.py。當我試圖挽救它說:如果我把created_py作爲參數賦值

之前引用

局部變量「CREATED_BY」,保存需要更多的參數。這真的很奇怪。

+0

按四個空格縮進代碼(或選擇它並按Ctrl + K)。 – 2010-05-16 11:17:39

+0

我對此感到困惑:'created_by = User.objects.get(created_by = user)',你確定'User'模型有'created_by'列嗎?但是,這應該會失敗,但是會出現'FieldError'。還有完整的回溯將是有益的。 – 2010-05-16 11:59:13

回答

7

您不顯示完整的回溯,這將有助於準確追蹤發生錯誤的位置。 (我懷疑這不是你正在運行的確切代碼,或者那不是實際的錯誤消息,因爲rebus提到的錯誤與代碼不匹配。)

但是,有幾個指針。首先,你似乎沒有使用表格來進行保存。如果你這樣做,你可能不會看到這個錯誤。而不是從請求手動獲取值,您應該使用request.POST實例化表單,然後保存該表單。此外,在嘗試使用它的值之前,您並未檢查表單是否真正有效。下面是你應該做的事情:

if request.method == 'POST': 
    form = NewForm(request.POST) 
    if form.is_valid(): 
     new_obj = form.save(commit=False) 
     new_obj.created_by = request.user 
     new_obj.save() 
     return HttpResponseRedirect('/') 
else: 
    form = NewForm() 
return render_to_response('news/new_form.html', {'form': form}, 
          context_instance=RequestContext(request)) 

另外,請注意你的經理是完全不相干的 - 默認的管理員已經定義了create方法,這不正是你的一樣。

+0

非常感謝!它的工作原理就像它應該:) – dana 2010-05-16 13:19:43

+0

:)是的。現在我看到了複選標記,並理解其含義:)我已經檢查過,謝謝你告訴我:) – dana 2010-05-23 19:29:43

相關問題