如何在Django中创建删除按钮

And*_*ndy 0 python django

请帮助我了解如何制作删除按钮,它必须删除一个 Cat

class Cat(models.Model):
    class Meta():
        db_table = "cat"

    paw = models.IntegerField(default=4)
    name = models.CharField(max_length=30, null=False, default='Cat')
    age = models.IntegerField(default=False, null=False)
    species = models.CharField(max_length=50, blank=True)
    hairiness = models.IntegerField(default=False, null=False)

    def __str__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

这是我的views.py,希望能对您有所帮助。(星期一需要我进行面试)

from django.shortcuts import render, get_object_or_404
from .models import Cat
from .forms import CatForm
from django.shortcuts import redirect

def home(request):
    template = "base.html"
    queryset = Cat.objects.all()
    context = {
        "object_list": queryset
    }
    return render(request, template, context)

def new_cat(request):
    if request.method == "POST":
        form = CatForm(request.POST)
        if form.is_valid():
            cat = form.save(commit=False)
            cat.save()
            return redirect('/', pk=cat.pk)
    else:
        form = CatForm()
    return render(request, 'new_cat.html', {'form': form})

def cat_edit(request, pk):
    cat = get_object_or_404(Cat, pk=pk)
    if request.method == "POST":
        form = CatForm(request.POST, instance=cat)
        if form.is_valid():
            cat = form.save(commit=False)
            cat.save()
            return redirect('/', pk=cat.pk)
    else:
        form = CatForm(instance=cat)
    return render(request, 'new_cat.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

该网站是asc来添加更多详细信息,但是我不知道还能添加什么。

from django.conf.urls import url
from . import views


urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^new/$', views.new_cat, name='new_cat'),
    url(r'^edit/(?P<pk>[0-9]+)/$', views.cat_edit, name='cat_edit'),
]
Run Code Online (Sandbox Code Playgroud)

wen*_*isa 6

首先,您应该创建一个cat_delete视图,该视图应如下所示:

def cat_delete(request, pk):
    cat = get_object_or_404(Cat, pk=pk)  # Get your current cat

    if request.method == 'POST':         # If method is POST,
        cat.delete()                     # delete the cat.
        return redirect('/')             # Finally, redirect to the homepage.

    return render(request, 'template_name.html', {'cat': cat})
    # If method is not POST, render the default template.
    # *Note*: Replace 'template_name.html' with your corresponding template name.
Run Code Online (Sandbox Code Playgroud)

然后,您应该在您的中映射此视图urls.py

from django.conf.urls import url
from . import views

app_name = 'cats'
# Note that app_name is added here!
# It is used as a namespace in order to reverse your urls better.
# See usage in template.

urlpatterns = [
    # ...
    url(r'^delete/(?P<pk>[0-9]+)/$', views.cat_delete, name='cat_delete')
]
Run Code Online (Sandbox Code Playgroud)

在模板中,您应该创建一个带有Delete按钮的表单,该表单将向删除视图发送一个POST请求:

<form action="{% url 'cats:cat_delete' cat.id %}" method="post">
    {% csrf_token %}
    <input type="submit" value="Delete cat">
</form>
Run Code Online (Sandbox Code Playgroud)

仔细查看表单的动作

{% url 'cats:cat_delete' cat.id %}
Run Code Online (Sandbox Code Playgroud)

在这里,我使用的是之前添加的app_namefrom urls.py,目的是通过名称而不是路径来解析您的网址。现在cats:cat_delete将评估为cats/delete/<pk>。当然你通过了cat.id

这应该可以删除Cat模型实例。希望我能帮上忙。