【发布时间】: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