我正在尝试为我的锻炼模型创建一个删除功能。 这是模型:
class Workout(models.Model):
workoutID = models.AutoField(primary_key=True)
name = models.CharField(max_length=40)
created_by = models.ForeignKey(User)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def delete(self):
return reverse("delete_workout", kwargs = {'workout_id': self.workoutID})
接下来我有观点:
def delete_workout(request, workout_id):
workout = get_object_or_404(Workout, workoutID = workout_id)
print(workout)
if request.user != workout.created_by:
return HttpResponse('Not ur workout')
else:
workout.delete()
return HttpResponseRedirect('/')
这是网址:
url(r'^(?P<workout_id>\d+)/delete/$', views.delete_workout, name='delete_workout'),
最后是 html:
<a href='{{ instance.delete }}'>
<button>Delete Workout</button>
</a>
我在控制台中没有收到任何错误,这就是为什么我不知道出了什么问题。
最佳答案
您正在覆盖类的删除方法只是为了获取删除 url。您将通过模板中的 url 函数获取 url,如 {% url delete_workout instance.workoutID %}
。因此,从模型中删除删除功能更改您的 html href url。保持 View 和 url 不变。没有问题
类应该是
class Workout(models.Model):
workoutID = models.AutoField(primary_key=True)
name = models.CharField(max_length=40)
created_by = models.ForeignKey(User)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
你的 html 应该是
<a href='{% url delete_workout instance.workoutID %}'>
<button>Delete Workout</button>
</a>
注意:django 模型本身会为每个表添加 id,因此您不必像workoutID = models.AutoField(primary_key=True)
那样指定它。
默认情况下,每个模型都有一个 id 字段,就像 id = models.AutoField(primary_key=True)
如果您考虑删除 workoutID,则模型变为
class Workout(models.Model):
name = models.CharField(max_length=40)
created_by = models.ForeignKey(User)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
html 将是
<a href='{% url delete_workout instance.id %}'>
<button>Delete Workout</button>
</a>
关于python - Django 中的删除功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48900777/