Django Ajax отправка формы, как получить конкретное поле модели из формы

Для моего проекта мне нужно иметь возможность отправлять форму через ajax без обновления страницы. У меня есть модель Post с тремя полями: животное, изображение и описание.

вот фотография моей модели

вот картинка моего form.py

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 на следующем изображении.

ajax javascript img

 <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), но у меня ничего не получается.

Вот как выглядит мой внутренний админ сайт с несколькими "успешными" отправками. Пожалуйста, дайте мне знать, если вы видите, где я делаю ошибку и как исправить эту раздражающую проблему! Спасибо!

Admin Posts Page

Все в вашем коде в порядке, вам просто нужно немного изменить ваш код 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)

Вернуться на верх