问题描述
我正在开发一个 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 (将#修改为@)