python
  • django
  • 2017-09-01 67 views 0 likes 
    0

    请帮助我了解如何使删除按钮,它必须删除Cat如何使删除按钮在Django

    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 
    

    这是我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}) 
    

    网站递增到ADDD更多的细节,但我只是不知道还有什么,我可以补充。

    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'), 
    ] 
    
    +0

    您可以尝试与您的'cat_edit'做同样的事情,请给我看看,请 –

    回答

    1

    首先,你应该创建一个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. 
    

    然后,你应该在你的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') 
    ] 
    

    在你的模板,你应该创建一个与删除按钮,这将简单地发送一个POST请求删除视图:

    <form action="{% url 'cats:cat_delete' cat.id %}" method="post"> 
        {% csrf_token %} 
        <input type="submit" value="Delete cat"> 
    </form> 
    

    仔细查看对表单的行动

    {% url 'cats:cat_delete' cat.id %} 
    

    这里我使用的是app_nameurls.py,我以前为了增加通过名字来解决您的网址,而不是路径。现在cats:cat_delete将评估为cats/delete/<pk>。当然你通过cat.id

    这应该会删除Cat模型的实例。希望我帮助。

    +0

    非常感谢您的帮助和真正的大回答,现在我明白了我的错误)) – Andy

    相关问题