【问题标题】:DeleteView not deletingDeleteView 不删除
【发布时间】:2019-04-26 07:29:05
【问题描述】:

我在为具有related model 的模型实施 DeleteView 时遇到问题。当我尝试删除一个 Task 对象时,什么也没有发生,并且它没有重定向到 success_url。注意发生。它只是继续显示模板。

以下是型号:

class Project(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    date_created = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

class Task(models.Model):
    name = models.CharField(max_length=50, default='New Model')
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    date_created = models.DateTimeField(default=timezone.now)

这是我的 DeleteView 类:

class TaskDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Task
    template_name = 'tasks/confirm_delete.html'   # template for deletion
    success_url ='/projects/'     

    # Test user permission
    def test_func(self):
        task = self.get_object()

        if self.request.user == task .project.author:
            return True
        else:
            return False

    def get_success_url(self):
        project = self.object.project
        return reverse_lazy('tasks-listview', kwargs={'pk': project.id })

和我的 URL 模式:

urlpatterns = [
    path('tasks/<int:pk>/list/', TasksListview.as_view(), name='tasks-listview'),
    path('tasks/<int:pk>/delete/', TaskDeleteView.as_view(), name='task-delete'),
]

这是我的删除神庙:

<form method=" POST" enctype="multipart/form-data">
        {% csrf_token %}
        <fieldset class='form-group'>
            <h4>Current Project: {{ object.project }}</h4>
            <h4>Are you sure you want to delete task named {{ object.name }}? </h4>
        </fieldset>
        <div class="form-group">
            <button class="btn btn-danger float-sm-right mr-1" type="submit">Yes, Delete</button>
            <a class="btn btn-secondary float-sm-right mr-1" href="{% url 'task-detail' object.id %}">Cancel</a>
        </div>
    </form>

【问题讨论】:

  • project = self.object. 在get_success_url() 方法中的意思是什么?
  • @JPG,我编辑了帖子。我忘记了一些代码。我最初对此有完整的路线。引用Task的父模型对象是project = self.object.project。
  • 你的UserPassesTestMixin 是什么?控制台有错误吗?
  • 但是为什么方法是GET 这是主要的麻烦,请检查你的模板。
  • 哦,是的,@Bear Brown!我在表单方法中有空间。喜欢这个form method=" POST"。谢谢...

标签: django


【解决方案1】:

我的删除视图类包含:

def delete(self, request, *args, **kwargs):
    self.get_object().delete()
    messages.add_message(self.request, messages.SUCCESS, 'Entity removed with success.')
    data = {'valid': True}
    return JsonResponse(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2020-10-04
    相关资源
    最近更新 更多