2013-04-03 8 views
2

Я искал сообщения, которые вытерпели ту же проблему, с которой я сейчас сталкиваюсь. Но я не нашел решения. Что моя проблема:Объект Django TypeError 'QueryDict' не является вызываемым

У меня есть список тегов. Сгенерировано {% for tag in all_tags %}. Каждый тег имеет форму tagstatus. Когда пользователь выбирает параметр из раскрывающегося списка, форма отправляется и должна сохранять объект TagStatus (теги являются foreignKey'd для TagStatus). Однако то, что возвращает это:

Exception Type: TypeError 
Exception Value: 'QueryDict' object is not callable 

HTML:

<form class="nice" id="status-form" method="POST" action=""> 
    {% csrf_token %} 
    <input type="hidden" name="status_check" /> 
    <input type='hidden' name="tag" value="{{ tag }}" /> 
    <select name="select" id="positionSelect" class="input-text category" onchange="this.form.submit()"> 
      <option name="all" value="0">Your Status</option> 
      <option name="investing" value="1">Status 1</option> 
      <option name="selling" value="2">Status 2</option> 
      <option name="interested" value="3">Status 3</option> 
    </select> 
</form> 

views.py:

@login_required 
def tags(request): 
    all_tags = Tag.objects.all() 
    context = base_context(request) 
    if request.method == 'POST': 
     if 'status_check' in request.POST: 
      status = request.GET('status') 
      tag = request.GET('tag') 
      user = request.user 
      tag_status, created = TagStatus.objects.get_or_create(status=len(status), tag=tag, user=user).save() 

      response = simplejson.dumps({"status": "Successfully changed status"}) 
     else: 
      response = simplejson.dumps({"status": "Error"}) 
      return HttpResponse (response, mimetype='application/json') 
    context['all_tags'] = all_tags 
    return render_to_response('tags/tag.html', context, context_instance=RequestContext(request)) 

models.py (если его значение):

class TagStatus(models.Model): 
    user = models.ForeignKey(User, null=True, unique=True) 
    status = models.CharField(max_length=2, choices=tag_statuses) 
    tag = models.ForeignKey(Tag, null=True, blank=True) 

    def __unicode__(self): 
     return self.status 

    def save(self, *args, **kwargs): 
     super(TagStatus, self).save(*args, **kwargs) 

Из того, что я собираю, это связано с тем, что статус не является числом. Но когда я конвертирую его в int. Я получаю ту же ошибку. Пожалуйста, помогите мне. Почему это происходит? И что исправить? Я не совсем уверен, как решить эту проблему. Благодарим вас за помощь.

ответ

22

Я считаю, что ошибка вы сталкиваясь в этих строках:

status = request.GET('status') 
tag = request.GET('tag') 

request.GET является QueryDict, и добавления() после того, как он пытается «вызвать» не вызываемый объект. Похоже, что синтаксис вы ищете является словарь синтаксис подстановки вместо:

status = request.GET['status'] 
tag = request.GET['tag'] 
+0

Больше ошибок следующие. Но да, это была проблема. Спасибо! – Modelesq

+0

Для меня это использовало функцию @property для функции, которая делает ее собственностью, поэтому вызывайте без() – radtek

1

или просто вызов GETs получить, чтобы получить ваши ценности

status = request.GET.get('status') 
tag = request.GET.get('tag') 
Смежные вопросы