Django Ajax форма представлена ​​дважды - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь отправить форму создания сообщения, однако, после того, как я нажму на кнопку отправки, представление вызывается дважды, и объект сообщения создается дважды по моему запросу Ajax, мне было интересно, что вызывает эту проблему?

Это мой пост_создание:

@login_required
def post_create(request):
    data = dict()
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():      
            post = form.save(False)
            post.author = request.user
            #post.likes = None
            post.save()
            data['form_is_valid'] = True
            posts = Post.objects.all()
            data['posts'] = render_to_string('home/posts/home_post.html',{'posts':posts})
        else:
            data['form_is_valid'] = False
    else:
        form = PostForm       
    context = {
    'form':form
    }
    data['html_form'] = render_to_string('home/posts/post_create.html',context,request=request)
    return JsonResponse(data) 

Это мой пост. js для обработки Ajax:

$(document).ready(function(){
    var ShowForm = function(){
        var btn = $(this);
        $.ajax({
            url: btn.attr("data-url"),
            type: 'get',
            dataType:'json',
            beforeSend: function(){
                $('#modal-post').modal('show');
            },
            success: function(data){
                $('#modal-post .modal-content').html(data.html_form);
            }
        });
        return false;
    };

    var SaveForm =  function(e){
        e.preventDefault();
        var form = $(this);
        $.ajax({
            url: form.attr('data-url'),
            data: form.serialize(),
            type: form.attr('method'),
            dataType: 'json',
            success: function(data){
                if(data.form_is_valid){
                    $('#post-list div').html(data.posts);
                    $('#modal-post').modal('hide');
                } else {
                    $('#modal-post .modal-content').html(data.html_form)
                }
            }
        })
        return false;
    }

//create
$('.create-post-btn').click(ShowForm);
$('#modal-post').on("submit",".post-create-form",SaveForm)

//update
$('#post-list').on("click",".show-form-update",ShowForm);
$('#modal-post').on("submit",".update-form",SaveForm)

//delete
$('#post-list').on("click",".show-form-delete",ShowForm);
$('#modal-post').on("submit",".delete-form",SaveForm)
});

И это моя модель поста :

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(validators=[MaxLengthValidator(250)])
    author = models.ForeignKey(Profile, on_delete=models.CASCADE)
    date_posted = models.DateTimeField(auto_now_add=True)
    last_edited= models.DateTimeField(auto_now=True)
    likes= models.ManyToManyField(Profile, blank=True, related_name='post_likes')

    def __str__(self):
        return self.subject

    def get_absolute_url(self):
        return reverse('home:home')

    def get_like_url(self):
        return reverse("home:like-toggle", kwargs={'pk': self.pk})

    def get_api_like_url(self):
        return reverse("home:like-api-toggle", kwargs={'pk': self.pk})

мой URL для пост-создания:

path('post/create/', views.post_create, name='post-create'),

мой post_create. html:

{% load crispy_forms_tags %}
{% load static %}
    <form method="POST" data-url="{% url 'home:post-create' %}" class="post-create-form">
        {% csrf_token %}
            <div class="modal-header">
                <h5 class="modal-title" >Create a Post</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                {{ form|crispy }}
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Post</button>
            </div>
    </form>

Объект post создан успешно, но дважды что может быть причиной этой проблемы? Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...