python - Django 中的删除功能不起作用

标签 python django django-views

我正在尝试为我的锻炼模型创建一个删除功能。 这是模型:

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/

相关文章:

python - 如何将 "npm login"作为 Python 子进程运行?

python - 使用列表理解迭代 Pandas 数据框

python - Django 项目 - 某些网址上的错误请求 (400)

python - 如何将 pil 裁剪图像保存到 django 中的图像字段

python - 计算 OOZIE 时间戳差异的最佳方法是什么?

python - 如何将列值转换为 DataFrame、Python 中的另一种模式?

python - Django:使用通用DeleteView删除选中的项目?

mysql - 对来自查询的字段结果进行编码

python - 完整性错误 *_id 不能为空

python - Django 代理模型返回父模型