hopheylalaley
hopheylalaley

Reputation: 69

Django: object has no attribute 'post'

I am trying to execute Ajax POST request in Django, but it gives me an error. I also have similar view for Ajax GET request and it works well. This is my view:

class ChangeWordStatus(JSONResponseMixin, AjaxResponseMixin, View):

def get_ajax(self, request, *args, **kwargs):
    user_profile = get_object_or_404(UserProfile, user=request.user)
    lemma = request.POST['lemma']
    new_status_code = int(request.POST['new_status_code'])

    word = Word.objects.get(lemma=lemma)
    old_status_code = user_profile.get_word_status_code(word)

    json_dict = {}
    json_dict["message"] = "Done"

    return self.render_json_response(json_dict)

I get this:

Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python34\lib\site-packages\django\views\generic\base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\braces\views\_ajax.py" in dispatch
  78.             return handler(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\braces\views\_ajax.py" in post_ajax
  87.         return self.post(request, *args, **kwargs)

Exception Type: AttributeError at /slv/change_word_status/
Exception Value: 'ChangeWordStatus' object has no attribute 'post'
Request information:
GET: No GET data

POST:
csrfmiddlewaretoken = 'eapny7IKVzwWfXtZlmo4ah657y6MoBms'
lemma = 'money'
new_status_code = '1'

What is wrong here?

Upvotes: 0

Views: 1871

Answers (1)

masnun
masnun

Reputation: 11906

From your stack trace, I believe you're using django-braces.

You're sending a POST request but you don't have a post_ajax method. I assume your get_ajax function should actually be post_ajax.

class ChangeWordStatus(JSONResponseMixin, AjaxResponseMixin, View):

    def post_ajax(self, request, *args, **kwargs):
        user_profile = get_object_or_404(UserProfile, user=request.user)
        lemma = request.POST['lemma']
        new_status_code = int(request.POST['new_status_code'])

        word = Word.objects.get(lemma=lemma)
        old_status_code = user_profile.get_word_status_code(word)

        json_dict = {}
        json_dict["message"] = "Done"

        return self.render_json_response(json_dict)

Reference: https://django-braces.readthedocs.org/en/latest/other.html#ajaxresponsemixin

Upvotes: 3

Related Questions