2017-07-06 120 views
1

我的Django程序有問題。我在Django初學者,我一直在尋找與相同的錯誤比我,但沒有成功,不同崗位的答案...似乎Django:'unicode'對象沒有屬性'get'

Here's my traceback : 

Environment: 


Request Method: POST 
Request URL: http://127.0.0.1:8000/pod 

Django Version: 1.11.2 
Python Version: 2.7.13 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'labinit', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "C:\Python27\lib\site-packages\django\core\handlers\exception.py" in inner 
    41.    response = get_response(request) 

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\admin\Desktop\django_learneo3\Learneo\labinit\views.py" in groupe_pod 
    121.  if form.is_valid(): 

File "C:\Python27\lib\site-packages\django\forms\forms.py" in is_valid 
    183.   return self.is_bound and not self.errors 

File "C:\Python27\lib\site-packages\django\forms\forms.py" in errors 
    175.    self.full_clean() 

File "C:\Python27\lib\site-packages\django\forms\forms.py" in full_clean 
    384.   self._clean_fields() 

File "C:\Python27\lib\site-packages\django\forms\forms.py" in _clean_fields 
    396.     value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name)) 

File "C:\Python27\lib\site-packages\django\forms\widgets.py" in 

value_from_datadict 
    639.   getter = data.get 

Exception Type: AttributeError at /pod 
Exception Value: 'unicode' object has no attribute 'get' 

這個問題,因爲我已經改變了我初始化 fonction,爲我在我看來,使用以下形式:

形式:

class Groupe_Form(forms.ModelForm) :  
    def __init__(self, nom_groupe, *args, **kwargs): 
     super(Groupe_Form,self).__init__(*args, **kwargs) 
     self.fields['pod'].widget = forms.Select() 
     pod1 = Groupe.objects.filter(nom_groupe = nom_groupe).values_list('pod', flat = True) 
     pods = list(pod1) 
     self.fields['pod'].queryset = Pod.objects.filter(id__in=pods) 
    class Meta: 
     model = Groupe 
     fields = ['pod'] 

瀏覽:

def groupe_pod(request): 

    global new_groupe 
    grp = new_groupe 
    form = forms.Groupe_Form(request.POST, grp) 
    if request.method == 'POST': 
     if form.is_valid(): 
      print "form was valid" 
      data_groupe_pod = request.POST.get('grp_pod') 
      print "data_groupe :", data_groupe_pod 

      global new_cours 
      print new_cours 

      if new_cours == "ICND1": 
       return redirect('http://127.0.0.1:8000/icnd_1') 
      elif new_cours == "ICND2": 
       return redirect('http://127.0.0.1:8000/icnd_2')   
    else : 
     form = forms.Groupe_Form(new_groupe) 
    return render(request, 'pod.html', locals()) 

我試過很多東西,我真的不知道我的Django代碼中的問題在哪裏。

+0

你爲什麼要在表單中傳遞grp?你可以解釋嗎? – Exprator

+0

您應該避免在Python代碼中使用'global'。你想用它做什麼? – Alasdair

+0

@Exprator:我需要grp才能擁有「動態」表單。在Model Groupe中,我有一個名爲「pod」的ManyToManyField與其他模型的關係。對於一個Groupe對象,我選擇了「豆莢」。我需要在我的表單中顯示我選擇的「豆莢」,而不是所有的「豆莢」 – Bhunyvelz

回答

2

表單的__init__方法是:

form = forms.Groupe_Form(grp, request.POST) 

您目前擁有的論點倒過來:

def __init__(self, nom_groupe, *args, **kwargs): 

因此,你應該用實例化。

+0

Thx,我沒有任何錯誤,但現在我的表單不再工作了......我選擇了我的選擇並且沒有迴應。它應該傳遞給另一種形式... – Bhunyvelz

+0

嘗試調試問題。當表單無效時檢查form.errors的值。我的猜測是你的'globals'代碼不工作 - 你將不得不尋找一種不同的方式將數據從一個請求傳遞到另一個請求。 – Alasdair

+0

'form.errors'顯示'errorlist'。我的表單中有我想要的值 – Bhunyvelz

1

您的__init__簽名具有第一個參數nom_groupe。在form = forms.Groupe_Form(request.POST, grp)中,您通過request.POST作爲第一個參數。你必須切換參數:

form = forms.Groupe_Form(grp, request.POST)