【问题标题】:one variable show other not, when pass post ajax in django在 django 中传递 ajax 时,一个变量显示其他变量
【发布时间】:2020-10-01 21:40:53
【问题描述】:

我不知道为什么会出现此错误,

TypeError: 'method' object is not subscriptable

我在另一个发布请求 ajax 中使用的相同东西我得到了所有变量。

但在这里我只得到 frm 变量而不是 pk

HTML

<form id="message-form" action="message/message_form/" user_id="{{u.id}}" method="POST">
        {% csrf_token %}
        <div class="container">
            <div class="row">
                <div id="text" class="col-10">
                    {{ msgform.text }}
                </div>
                <div class="col-1">
                    <button id="submit" class="btn"  type="submit"><img height="30px" src="/static/img/send-button.png" alt="send"></button>
                </div>
            </div>
        </div><br>
    </form>

脚本

<script type="text/javascript">
        var frm = $('#message-form');
        var id;
        id =   frm.attr("user_id"); 

        frm.submit(function () {
            $.ajax({
                type: frm.attr("method"),
                url: frm.attr("action"),
                dataType: 'json', 
                data: { csrfmiddlewaretoken: "{{ csrf_token }}", pk:id, frm:frm},
                error: function(data) {
                   // $("#MESSAGE-DIV").html("Something went wrong!");
                }
            });
            return false;
        });
</script>

views.py

def post(self, request):
        new_msg = request.POST.get('text')
        print(new_msg)
        form = MessageForm()
//I GET ERROR HERE MY PK VARIBLE NOT PRESENT IN REQUEST POST
        print('request.id is here',request.POST.get['pk'])
        u = get_object_or_404(User,pk=request.POST['pk'])
        msg = message.objects.filter(sender=request.user).filter(receiver=u).all() | message.objects.filter(sender=u).filter(receiver=request.user).all() 
        if form.is_valid():
            smg = form.save(commit=False)
            smg.sender = request.user
            smg.receiver = u
            smg.save()
            if request.user != u and User.objects.filter(receiver__receiver=u,receiver__read=False).exists:
                notify.send(request.user, recipient=u, verb="message you please read in message box",public=False)
        msg = message.objects.filter(sender=request.user).filter(receiver=u).all() | message.objects.filter(sender=u).filter(receiver=request.user).all() 
        data = { "messages":msg}
        return HttpResponse(json.dumps(data), content_type='application/json')

编辑

forms.py

class MessageForm(forms.ModelForm):
    class Meta:
        model = message
        fields = ('text','image')
        widgets = {
        # <input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">

            'text': forms.Textarea(attrs={'rows':1.5,'placeholder':"Enter message",'type':'text',
                          'class':'form-control','aria-label':"Dollar amount (with dot and two decimal places)",}),
        }

错误

Internal Server Error: /message/message_form/
Traceback (most recent call last):
  File "C:\publish\lib\site-packages\django\core\handlers\exception.py", line 34, in inner     
    response = get_response(request)
  File "C:\publish\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response 
    response = self.process_exception_by_middleware(e, request)
  File "C:\publish\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\publish\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\publish\lib\site-packages\django\views\generic\base.py", line 97, in dispatch       
    return handler(request, *args, **kwargs)
  File "C:\publish\studentcollegeworld\messaging\views.py", line 23, in post
    print('request.id is here',request.POST.get['pk'])
TypeError: 'method' object is not subscriptable
[12/Jun/2020 10:48:01] "POST /message/message_form/ HTTP/1.1" 500 88429

主要问题是pk 变量未显示在帖子数据中

【问题讨论】:

  • 您能否添加异常的完整堆栈跟踪以及 MessageForm() 的代码?
  • @Omar 我已编辑,请检查问题。谢谢

标签: javascript jquery django ajax ajaxform


【解决方案1】:

您需要将pk 作为隐藏输入传递回您的表单

<form [...]>
    <input type="hidden" id="user_id" name="user_id" value="{{u.id}}">
[...]
</form>

【讨论】:

  • 谢谢。你的回答奏效了。但是为什么我的代码不起作用..
  • @AmarRokade 您的表单仅包含文本和图像字段,不包含用户字段。在表单标签中发送 user_id 也不会做任何事情。
  • 好吧,这意味着提交表单时我们无法发送attr值?我们必须在形式中包括答案。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-07-24
  • 2016-10-19
  • 2016-10-17
  • 2013-06-03
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
相关资源
最近更新 更多