2013-11-28 4 views
-1

Я определили выбор для категории в models.py, которая в настоящее время ссылаются в forms.py как так:Джанго множественный выбор AttributeError: «ул» объект не имеет атрибута «status_code»

models.py

class Exp(models.Model): 
    CATEGORIES = (('Inc', 'Inc'),\ 
        ('Hom', 'Hom'),\ 
        ('syn', 'Syn'),\ 
        ('Was', 'Was')\ 
       ) 

forms.py

class ExpForm(ModelForm): 
    category = forms.MultipleChoiceField(choices=Exp.CATEGORIES, widget=forms.CheckboxSelectMultiple()) 
    class Meta: 
     model = Exp 

views.py

def view_exp(request): 
    if request.method == "POST": 
     form = ExpForm(request.POST) 
     if form.is_valid(): 
     ... 

Выбор мультиселектора отображается правильно в форме, но когда я выбираю несколько параметров, form.is_valid() в views.py возвращает false с ошибкой AttributeError: 'str' object has no attribute 'status_code. Я понимаю, что я получаю str вместо объекта HttpResponse, но не могу понять, как исправить эту ошибку. Любая помощь приветствуется.

ПРИМЕЧАНИЕ: Существуют другие поля в том же виде, что и тип CharField.

Вот отслеживающий:

Traceback (most recent call last): 
    File "/software/python/python-2.7.3/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in get_response 
    response = middleware_method(request, response) 
    File "/software/python/python-2.7.3/lib/python2.7/site-packages/django/middleware/common.py", line 106, in process_response 
    if response.status_code == 404: 
AttributeError: 'str' object has no attribute 'status_code' 
+1

Можете ли вы дать полный отслеживающий? – mariodev

+0

@mariodev, я обновил исходное сообщение с помощью трассировки, спасибо. – UNagaswamy

+2

Что заставляет вас думать, что это метод is_valid, вызывающий ошибку? Это не то, что показывает трассировка. На самом деле ошибка вызвана тем, что ваш объект возвращает строку, а не HttpResponse. –

ответ

0

Благодаря y'alls ценных замечаний и утром чашка кофе, я взял глубокое погружение в свой код. Я заработал после исправления ошибок. Здесь ошибка, что я имел в моем models.py:

class Exp(models.Model): 

    # The first element in each tuple is the actual value to be stored. The second element is the human-readable name for the option. 
    CATEGORIES = (('Inc', 'Inc'),\ 
       ('Clv','Clv'), \ 
       ('Dys', 'Dys'), \ 
       ('Hom', 'Hom'), \ 
       ('Syn','Syn')) 

    #category = models.CharField(max_length=100, choices=CATEGORIES) <--- culprit 

Я не понимаю, что мое первоначальное определение категории все еще сохраняющиеся вокруг. Я прокомментировал это в models.py, и он работал, как ожидалось!

Вот мой forms.py:

class ExpForm(ModelForm): 
    category = forms.MultipleChoiceField(choices=Exp.CATEGORIES,widget=forms.CheckboxSelectMultiple()) 
    class Meta: 
     model = Exp 

Вот мой views.py:

def view_experiment(request): 
    if request.method == "POST": 

     form = ExpForm(request.POST) 
     if form.is_valid(): 
      picked = form.cleaned_data.get('category') 
      category = ",".join([str(c) for c in picked]) 
      return HttpResponse("Multichoiceselect returned {0}".format(category)) 
     else: 
      return "[ERROR] from views: {0}".format(form.errors) 
    else: 
     form = ExpForm() 
    return render(request, 'template.html', {'form': form}) 

выбранные несколько вариантов возвращается в виде списка юникод строк. Затем я преобразовал элементы списка в строку и присоединил их к запятой.

Also see this

Смежные вопросы