I don't Why I get this error,
TypeError: 'method' object is not subscriptable
same thing I used in another post request ajax I got all variable.
but here I only get frm
variable but not 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
<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')
Edit
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)",}),
}
Error
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
the main problem is pk
variable not showing in post data
You need to pass the pk
back as a hidden input to your form
<form [...]>
<input type="hidden" id="user_id" name="user_id" value="{{u.id}}">
[...]
</form>