Почему моя кнопка удаления не удаляет мой объект базы данных? Джанго - PullRequest
1 голос
/ 14 октября 2019

Я собрал кнопку удаления и отредактировал мой вид, он не работает. Может кто-нибудь помочь мне это исправить?

Я переместил код и попробовал кое-что, но не могу заставить его работать. Мне нужно, чтобы кто-то показал мне, что я делаю неправильно.

Мой взгляд:

def post_edit(request, pk):
    post = get_object_or_404(Listing, pk=pk)
    if request.method == "POST":
        form = ListingForm(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('post_view', pk=post.pk)
    else:
        form = ListingForm(instance=post)
    if request.POST.get('delete'):
        post.delete()
        return redirect('listings')
    return render(request, 'post_edit.html', {'form': form})

Мой html:

{% extends 'base.html' %}

{% block title %}Post Edit{% endblock %}

{% block content %}
    Hi {{ user.username }}!
    <p><a href="{% url 'logout' %}">logout</a></p>

    <h1>Edit listing:</h1>
    <p>The listing will only be viewable to users if "Is Live" is checked.</p>
    <form method="POST" enctype="multipart/form-data" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
        <p>Click the button below to delete this listing. No second warning is given, once you click delete it will be
            removed.</p>
        <button type="delete" class="delete btn btn-default">delete</button>
    </form>

{% endblock %}

1 Ответ

1 голос
/ 14 октября 2019

"delete" не является допустимым типом для элемента управления формы HTML. Вам нужно изменить его на "submit" (поскольку вы все еще хотите отправить форму).

Вам нужно будет создать две кнопки с одинаковым именем и разными значениями, например так:

<button type="submit" name="submit" value="submit" class="save btn btn-default">Save</button>
<p>Click the button below to delete this listing. No second warning is given, once you click delete it will be
            removed.</p>
<button type="submit" name="submit" value="delete" class="delete btn btn-default">delete</button>

Затем вы можете проверить в своем представлении, была ли нажата кнопка удаления, например:

def post_edit(request, pk):
    post = get_object_or_404(Listing, pk=pk)
    if request.method == "POST":
        if request.POST.get('submit') == 'delete':
             post.delete()
             return redirect('listings')
        form = ListingForm(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('post_view', pk=post.pk)
    else:
        form = ListingForm(instance=post)
    return render(request, 'post_edit.html', {'form': form})

Обратите внимание, что я перемещаю чек для кнопки удаления внутрь if request.method == "POST": block, по двум причинам:

  1. Вам нужно будет проверять значения POST, только если это на самом деле метод post.

  2. Существуетне нужно редактировать сообщение, а затем удалять его.

...