Django Ajax отправка формы, как получить конкретное поле модели из формы
Для моего проекта мне нужно иметь возможность отправлять форму через ajax без обновления страницы. У меня есть модель Post с тремя полями: животное, изображение и описание.
class PostForm(ModelForm):
class Meta:
model = Post
fields = '__all__'
вот картинка моей страницы просмотров
def homePage(request):
form = PostForm()
if request.method == 'POST':
animalType=request.POST['animal']
new_post = Post(animal=animalType)
new_post.save()
context = {'form': form}
return render(request, 'home.html', context)
Я полагаю, что проблема кроется в javascript, который я использую для отправки формы без обновления страницы. Я могу успешно отправить форму, но секция data:{...} в моей секции <script type="text/javascript>... должна быть неправильной? Я имею в виду строку 651 на следующем изображении.
<script type="text/javascript">
$(document).on('submit','#post-form',function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:'',
data:
{
animal:$("form").val(),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
},
success:function(data){
alert("success!")
}
})
});
</script>
Мне нужно, чтобы это значение было чем-то другим, чем просто:
animal:$("form).val()
поскольку всякий раз, когда я отправляю это и перехожу на внутренний административный сайт моего проекта, я не могу редактировать свои сообщения, и они просто пустые объекты в моей базе данных. В идеале я бы хотел, чтобы это значение было названием животного, которое выбрал пользователь. Я пробовал использовать такие значения, как $("form.model.animal").val() или $("form").val(animal), но у меня ничего не получается.
Вот как выглядит мой внутренний админ сайт с несколькими "успешными" отправками. Пожалуйста, дайте мне знать, если вы видите, где я делаю ошибку и как исправить эту раздражающую проблему! Спасибо!
Все в вашем коде в порядке,
вам просто нужно немного изменить ваш код AJAX
и ваш файл views.py
.
AJAX
var animalTyle= $('#animalType').val();
$.ajax({
type: "POST",
url: "{% url '' %}",
async: true,
data: {
animalTyle: data,
csrfmiddlewaretoken: '{{ csrf_token }}',
},
success: function () {},
failure: function () {}
});
views.py
def homePage(request):
form = PostForm()
if request.method == 'POST':
animalType=request.POST.get('animal')
new_post = Post(animal=animalType)
new_post.save()
context = {'form': form}
return render(request, 'home.html', context)