【发布时间】:2021-09-23 01:37:17
【问题描述】:
HEADUP:我不知道这是否是重复的。有很多类似的标题之一,但他们没有回答我的问题。但是,如果它是重复的,请通知我。
我有一个名为 Item 的模型:
class Item(models.Model):
title = models.CharField(max_length=120)
date_created = models.DateTimeField(default=timezone.now)
deadline = models.DateTimeField(default=timezone.now() + timedelta(5))
task = models.ForeignKey(Task, on_delete=models.CASCADE)
is_completed = models.BooleanField(default=False)
如果您看到,Item 引用了一个名为 Task 的 ForeignKey:
class Task(models.Model):
title = models.CharField(max_length=120)
description = models.TextField()
date_created = models.DateTimeField(default=timezone.now)
deadline = models.DateTimeField(default=timezone.now() + timedelta(5))
author = models.ForeignKey(User, on_delete=models.CASCADE)
is_completed = models.BooleanField(default=False)
我有一个项目的删除视图:
class DeleteItemView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Item
template_name = 'function/delete_item.html'
success_url = reverse('all-items')
def test_func(self):
item = get_object_or_404(Item, id=self.kwargs['pk2'])
if item.task.author == self.request.user and not item.task.is_completed:
return True
return False
def get_context_data(self, **kwargs):
context = super(DeleteItemView, self).get_context_data(**kwargs)
context['task'] = Task.objects.filter(id=self.kwargs['pk'])[0]
return context
删除视图的 url 模式是:
path('task/<int:pk>/item/<int:pk2>/delete/', DeleteItemView.as_view(), name='delete-item'),
pk 用于 Task 模型,pk2 用于 Item 模型。
现在,我的问题是这样的。每当我尝试转到此删除视图时,都会导致错误,提示找不到与查询匹配的项目 (404)。它说Raised by: function.views.DeleteItemView。我不知所措,花了将近半天的时间试图弄清楚这一点,但没有成功。
任何帮助或答案将不胜感激。
【问题讨论】:
-
什么是
pk,什么是pk2?它们到底适用于哪种型号?此外,您应该在问题中显示您的 url 模式。 -
我添加了关于什么 pk 和 pk2(任务模型和项目模型)以及 url 模式的描述。感谢您的提示!
标签: python django django-views http-status-code-404