python
  • django
  • 2017-09-01 68 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

    相關問題