如何从多表单按钮提交中删除django对象?

问题描述

我正在开发一个 django 应用程序,我很确定我弄错了,但我无法练习如何从表单按钮中删除 django 对象。我已经使编辑/更新字段正常工作,但我不确定如何使用相同的表单(或其下方的表单)来处理删除。我对 django 的经验有限,我还没有正确设置日志记录。我试过下面的。我究竟做错了什么?

型号:

class Tier(models.Model):
    number = models.PositiveSmallIntegerField(default=0)
    description = models.TextField(max_length=800,verbose_name='Description')
    price = models.IntegerField(verbose_name='Price')
    can_message = models.BooleanField(default=False)
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='tier_user')

    def __str__(self):
        return 'Tier ' + str(self.number)

    def save(self,*args,**kwargs):
        amount = Tier.objects.filter(user=self.user).count()
        self.number = amount + 1
        return super().save(*args,**kwargs)

    def delete(sender,instance,**kwargs):
        tier = instance
        tier.delete()

EditTierForm:

         <div>
         <form method="post" action="" role="form" class="col s12">
                <h4>Edit Tier</h4>
                {% csrf_token %}
                <div class="input-field col s12">
                    ...
                </div>
                <div class="input-field col s12>">
                <button class="btn waves-effect waves-light" type="submit" name="action">Save
                    <i class="material-icons right">add</i>
                </button>
            </div>
         </form>
         <form action="{% url 'delete-tier' tier_id=tier.number %}" method="delete" role="form" class="col s12">
                {% csrf_token %}
                <div class="input-field col s12>">
                <button class="btn waves-effect waves-light btn red" type="submit" name="action">Delete Tier
                <i class="material-icons left">delete</i>
                </button>
              </div>
         </form>
         </div>

网址:

    path('mytiers/',TiersList,name='mytiers'),path('mytiers/edit/<int:tier_id>',EditTier,name='edit-tier'),path('mytiers/delete/<int:tier_id>',DeleteTier,name='delete-tier'),# path('mytiers/delete/(?P<int:tier_id>[0-9]+)/$',

观看次数:

def EditTier(request,tier_id):

    tier = get_object_or_404(Tier,id=tier_id)
    if request.method == 'POST':
        form = EditTierForm(request.POST,request.FILES,instance = tier)
        if form.is_valid():
            tier.price = form.cleaned_data.get('price')
            tier.description = form.cleaned_data.get('description')
            tier.can_message = form.cleaned_data.get('can_message')
            tier.save()
            return redirect('mytiers')
    else:
        form = EditTierForm(instance = tier)

    context = {
        'form':form,}

    return render(request,'edittier.html',context,tier)


def DeleteTier(request,tier_id):
    tier = get_object_or_404(Tier,id=tier_id)
    if request.method == 'POST':
           tier.delete()

    context = {
        'form':form,}

    return redirect('mytiers')

目前我不断收到 Reverse for 'delete-tier' with keyword arguments '{'tier_id': ''}' not found. 错误。所以我不认为层 id 正在传递。但无论我尝试什么,我似乎都无法让它工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)