2012-07-18 67 views
0

試圖創建一個表單,您可以作爲用戶註冊,並將自己添加到一個或多個類別。收到一個錯誤,而這樣做的:在Django表單和MultipleChoiceField

類型錯誤/用戶/添加用戶/

「類別」是這個功能的無效關鍵字參數

這裏是我的形式.py:

class AddUser(forms.Form): 
    name = forms.CharField() 
    title = forms.CharField() 
    website = forms.CharField(required=False) 
    email = forms.EmailField() 
    phone = forms.CharField(required=False) 
    company = forms.ModelChoiceField(queryset=Company.objects.all()) 
    categories = forms.ModelMultipleChoiceField(queryset=Category.objects.all()) 

最後一行是我遇到的問題用。

這裏是我的views.py:

def add_user(request): 
    if request.method == 'POST': 
     form = AddUser(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      try: 
       p = User.objects.get(email=cd['email']) 
       error = "There's already a user with that e-mail adress registered. Maybe he/she is already here?" 
       return render_to_response('users/add_user.html', {'form': form, 'error': error}, context_instance=RequestContext(request)) 
      except User.DoesNotExist: 
       p = User(name=cd['name'], title=cd['title'], website=cd['website'], email=cd['email'], phone=cd['phone'], company=cd['company'], categories=cd['categories']) 
       p.save() 
      return HttpResponseRedirect('../thanks/') 
    else: 
     form = AddUser(request.POST) 
     error = "You can't really submit empty forms. Try adding something useful :)"  
    return render_to_response('users/add_user.html', {'form': form}, context_instance=RequestContext(request)) 

如果任何人有這個問題的任何建議(或一般以改善我的代碼甚至建議),我會很高興!我是Django的初學者,所有幫助表示感謝。

+0

看來你已經擴展了django用戶模式莫名其妙,請添加它 – 2012-07-18 14:28:59

回答

0

你的問題就在這裏:

p = User(name=cd['name'], title=cd['title'], website=cd['website'], email=cd['email'], phone=cd['phone'], company=cd['company'], categories=cd['categories']) 

的問題是,用戶模型不包括類別字段,只是因爲它不包括網站或公司。請參閱list of the available fields

結合使用Django的認證系統,有不同的方法來處理額外的數據。記住用戶類或向用戶添加具有附加信息和一對一字段的模型。後面的選項似乎是suggested,所以我建議沿着這條路走下去。

+0

啊。這是因爲我調用了模型User?因爲這不應該是Django Auth系統的一部分。 (不會有登錄或註銷等)將它命名爲「Member」或「Fellow」可解決問題嗎? – Mats 2012-07-18 14:41:00

+0

而順便說一句。網站,公司,標題等作品。這只是我遇到問題的分類字段。 用戶Models.py: 類別= models.ManyToManyField( 'categories.Category',related_name = '用戶',空白=真) – Mats 2012-07-18 15:10:10

+1

墊,請包括用戶模型定義然後。 'User'這個名字並不是一個問題,但你應該在你的答案中明確提及它。 你可能也想看看ModelForm的;他們將爲您節省完全爲User實例定義表單的步驟。 – 2012-07-20 09:24:57

0

有點挑剔,但你確實要求其他建議。該位:

else: 
    form = AddUser(request.POST) 

應(IMO)改成這樣:

else: 
    form = AddUser() 

有沒有必要使用request.POST的GET請求。我從來沒有嘗試過,但我猜它會起作用,你只是得到一個空集。所以不是一個錯誤,但可能是一個混亂的來源。

您的錯誤消息也未被使用。在這種情況下,頁面上的GET並不是一個錯誤,它只是頁面最初顯示的方式。

相關問題