Я знаю, что этот вопрос может быть дубликатом многих в stackoverflow. Но это не помогло мне. Я попробовал это , но без обновления не удалось.
Мой models.py
:
class Messages(models.Model):
id = models.CharField(max_length=8, primary_key=True)
messages = models.TextField()
Это мой html
<form action="{% url 'messages' %}" method="post" id="new_message_form">
{% csrf_token %}
<label for="">message</label><br>
<textarea id="message" cols="30" rows="10"></textarea><br>
<button type="submit">Submit</button>
</form>
Это мой views.py
:
def messages(request):
if request.method == "POST":
message = Messages()
message.messages = request.POST['message']
message.save()
return redirect('messages')
return render(request, 'app/messages.html', context)
А это мой script
:
$(document).on('submit', '#new_message_form', function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: '/messages/',
data: {
message: $('#message').val(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
},
success:function(){
alert("New message created!")
}
});
});
Это приводит к MultiValueDictKeyError
Вместо этого я попытался
message.messages = request.POST.get('message', False)
Это только получает значение от входа и передает. Но я не могу представить его без обновления. Кто-нибудь может мне помочь?
РЕДАКТИРОВАТЬ 1 - MultiValueDictKeyError
Internal Server Error: /messages/
Traceback (most recent call last):
File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\datastructures.py", line 76, in __getitem__
list_ = super().__getitem__(key)
KeyError: 'message'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\mowli\Desktop\Projects\gcepac\app\views.py", line 17, in messages
message.messages = request.POST['message']
File "C:\Users\mowli\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\datastructures.py", line 78, in __getitem__
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'message'
[16/Apr/2020 18:12:30] "POST /messages/ HTTP/1.1" 500 90361
РЕДАКТИРОВАТЬ 2 На самом деле форма даже не отправляется при использовании этого
message.messages = request.POST.get('message', False)
Это отправляет форму с значение «Ложь» в БД. После отправки формы я должен получить предупреждение, верно? Поэтому, пожалуйста, пропустите эту часть.